chho的专栏

对于整个世界我微不足道,但是我对于自己确是全部

常浩ID:chho
75136次访问,排名1299好友0人,关注者1
chho的文章
原创 106 篇
翻译 0 篇
转载 0 篇
评论 24 篇
chho的公告


名字:Chho
JAVA程序员,现在对Linux产生了浓厚的兴趣。

我的Mail:
最近评论
文章分类
收藏
    相册
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    原创 Hibernate入门26 - Criteria 查询收藏

    新一篇: Hibernate入门27 - 事务管理 | 旧一篇: Hibernate入门25 - Session 管理

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

    发表于 @ 2005年01月27日 20:47:00|编辑

    新一篇: Hibernate入门27 - 事务管理 | 旧一篇: Hibernate入门25 - Session 管理

    评论:没有评论。

    发表评论  


    当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
    Csdn Blog version 3.1a
    Copyright © chho