Hibernate入门26 - Criteria 查询

入门 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章中介绍有更多的查询方式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值