1.一个简单的例子,根据用户名查询用户信息:
static void query(String name) { Session session = HibernateUtil.getSession(); String queryString = "from User as user where user.id<?"; Query query = session.createQuery(queryString); query.setString(0, name); List<User> list = query.list(); for (User user : list) { System.out.println(user); } }
说明:HQL语句支持多态,举个例子:“from Object” 查询的整个数据库中的所有记录,因为Object是所有类的父类。
2.HQL的命名参数和Query接口的分页查询
如果HQL中的占位符‘?’太多,会导致程序难以编写,这时就可以使用“命名参数”:
static void query2(String name,String password) { Session session = HibernateUtil.getSession(); String queryString = "from User as user where user.name=:name and user.password=:password"; Query query = session.createQuery(queryString); query.setString("name", name); query.setString("password", password); List<User> list = query.list(); for (User user : list) { System.out.println(user); } }
使用Query实现分页很容易:
query.setFirstResult(firstResult) 和 query.setMaxResults(maxResults)
查询的结果是从firstResult到firstResult+maxResults-1
3.使用Criteria实现更加面向对象的条件查询:
static void query(String name) { Session session = HibernateUtil.getSession(); Criteria cri = session.createCriteria(User.class); cri.add(Restrictions.eq("name", name)); // 添加约束条件 List<User> list = cri.list(); for (User user : list) { System.out.println(user); } }
使用Criteria实现分页和Query基本上是一样的
说明:使用Criteria进行查询,完全不用涉及SQL或者是HQL,如果你对他们不感兴趣,使用Criteria是一个非常不错的选择。Restrictions中有大量的static方法,能够添加各种查询条件。