热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Criteria

Criteria使用Criteria进行查询,主要要清晰的是Hibernate提供了那些类和方法来满足开发中查询条件的创建和组装。构建Criteria查询Cri

Criteria

使用 Criteria 进行查询,主要要清晰的是 Hibernate 提供了那些类和方法来满足开发中查询条件的创建和组装。


构建Criteria查询

Criteria 这个接口代表对一个特定的持久化类的查询,Session是用来创建Criteria实例的工厂:
创建方法:Criteria criteria = session.createCriteria(Mytest.class);

Criteria对SQL进行封装,让开发人员可以用对象的方式对数据库进行操作。
查询User的所有字段

Criteria criteria = session.createCriteria(User.class);
List users = criteria.list();
Iterator iterator = users.iterator();
while(iterator.hasNext()){User user = (User)iterator.next();System.out.println(user.getId() +" \t " + user.getName() +"/" + user.getAge());
}

Criteria是个容器,如果想要设定查询条件,则要使用add()方法加入Restrictions的条件限制。
如下,查询age大于20且小于40的的数据

Criteria criteria = session.createCriteria(User.class);
criteria.add(Restrictions.gt("age",new Integer(20)));
criteria.add(Restrictions.it("age",new Integer(40)));
List users = criteria.list();

使用逻辑组合来进行查询

age等于(eq)20或者(or)age为空(isNull)

Criteria criteria = session.createCriteria(User.class);
criteria.add(Restrictions.or(Restrictions.eq("age",new Integer(20)),Restrictions.inNull("age")));
List users = criteria.list();

限定查询数量 分页查询

Criteria的setMaxResults()方法可以限定查询回来的数据量,如果配合setFirstResult()设定传回查询结果起始数据的位置,就可以实现简单的分页,例如传回第51条之后的50条数据(如果有的话):

Criteria criteria = session.createCriteria(User.class);criteria.setFirstResult(51);criteria.setMaxResults(50);List users = criteria.list();

使用Property来进行查询

Property实例是获得一个条件的另外一种途径。你可以通过调用Property.forName() 创建一个使用add()方法加入条件时,预设是使用and来组合条件

Property age = Property.forName("age");List cats = sess.createCriteria(Cat.class).add( Restrictions.disjunction().add( age.isNull() ).add( age.eq( new Integer(0) ) ).add( age.eq( new Integer(1) ) ).add( age.eq( new Integer(2) ) ) ) .add( Property.forName("name").in( new String[] { "Fritz", "Izi", "Pk" } ) ).list();

Restrictions常用限定查询方法

    Restrictions.eq –> equal,等于.

    Restrictions.allEq –> 参数为Map对象,使用key/value进行多个等于的比对,相当于多个Restrictions.eq 的效果

    Restrictions.gt –> great-than > 大于

    Restrictions.ge –> great-equal >= 大于等于

    Restrictions.lt –> less-than, <小于

    Restrictions.le –> less-equal <&#61; 小于等于

    Restrictions.between –> 对应SQL的between子句
    
    Restrictions.like –> 对应SQL的LIKE子句

    Restrictions.in –> 对应SQL的in子句

    Restrictions.and –> and 关系

    Restrictions.or –> or 关系

    Restrictions.isNull –> 判断属性是否为空,为空则返回true 相当于SQL的 is null

    Restrictions.isNotNull –> 与isNull相反 相当于SQL的 is not null

    Restrictions.sqlRestriction –> SQL限定的查询

    Order.asc –> 根据传入的字段进行升序排序

    Order.desc –> 根据传入的字段进行降序排序

hibernate中Expression和Restrictions的用法有什么区别
Expression是底层的&#xff0c;能够支持嵌套查询。
Restrictions是已实现的基础的查询方式&#xff0c;一般用这个得多。


推荐阅读
author-avatar
lao6345790
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有