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方法,能够添加各种查询条件。