您的位置:首页 > 其它

Hibernate入门26 - Criteria 查询

2005-01-27 20:47 225 查看
入门 26 - Criteria 查询
 Hibernate支持一种符合Java撰写习惯的查询API,使用Session建立一个net.sf.hibernate.Criteria,您可以在不使用SQL甚至HQL的情况下进行对数据库的查询。
 我们以之前所练习过的第一个Hibernate程序完成的结果为例:
入门 02 - 第一个Hibernate程序
 如果要使用Criteria来查询所有的User数据,则如下撰写:
Criteria crit = session.createCriteria(User.class);
List users = crit.list();
for (ListIterator iterator = users.listIterator(); iterator.hasNext(); ) {
User user = (User) iterator.next();
System.out.println("name: " + user.getName());
System.out.println("age: " + user.getAge());
}

 如果我们要为查询限定条件,则可以透过net.sf.hibernate.expression.Expression设定查询条件,Expression拥有许多条件查询方法,举个实际的例子说明:
Criteria crit = session.createCriteria(User.class);
crit.add(Expression.ge("age", new Integer(25)));
List users = crit.list();

 Expression的ge()方法即great-equal,也就是大于等于(>=),在上例中我们设定查询age属性大于等于25的User数据。
 您也可以设定多个查询条件,例如:
crit.add(Expression.gt("age", new Integer(20)));
crit.add(Expression.between("weight", new Integer(60),new Integer(80)));
List users = crit.list();

 上例中我们查询age大于20,而weight介于60到80之间的User。
 您也可以使用逻辑组合来进行查询,例如:
crit.add(Expression.or(
Expression.eq("age", new Integer(20)),
Expression.isNull("age")
));
List users = crit.list();

 如果要对结果进行排序,可以使用net.sf.hibernate.expression.Order,例如:
List cats = session.createCriteria(User.class)
.add(Expression.ge("age", new Integer(20));
.addOrder( Order.asc("name") )
.addOrder( Order.desc("age") )
.setMaxResults(50)
.list();

 setMaxResults()方法可以限定查询回来的笔数,如果配合setFirstResult()设定传回查询结果第一笔数据的位置,就可以实现简单的分页,例如:
Criteria crit = session.createCriteria(User.class);
crit.setFirstResult(51);
crit.setMaxResult(50);
List users = crit.list();

 上面的例子将传回第51笔之后的资料(51到100)。
 实际上,Criteria、Expression、Order等是对SQL进行了封装,让Java程序设计人员可以用自已习惯的语法来撰写查询,而不用使用HQL或SQL(有兴趣的话,可以在组态档中设定显示SQL,看看对应的SQL),然而Criteria在Hibernate中功能还不是很完美,只 能实现一些较为简单的查询,对于查询,Hibernate仍鼓励使用HQL作为查询的首选方式。
 Criteria的使用相当简单,这边只介绍一些基本,有兴趣的话,在Hibernate参考手册的第12章中介绍有更多的查询方式。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: