1、创建一个Criteria实例

net.sf.hibernate.Criteria这个接口代表对一个特定的持久化类的查询。Session是用来制造Criteria实例的工厂。

Criteria crit = sess.createCriteria(Cat.class);

crit.setMaxResults(50);

List cats = crit.list();

2、缩小结果集范围

一个查询条件(Criterion)是net.sf.hibernate.expression.Criterion接口的一个实例。类net.sf.hibernate.expression.Expression定义了获得一些内置的Criterion类型。

List cats = sess.createCriteria(Cat.class)

.add( Expression.like("name", "Fritz%") )

.add( Expression.between("weight", minWeight, maxWeight) )

.list();

表达式(Expressions)可以按照逻辑分组.

List cats = sess.createCriteria(Cat.class)

.add( Expression.like("name", "Fritz%") )

.add( Expression.or(

Expression.eq("age", new Integer(0) ),

Expression.isNull("age")

) )

.list();

List cats= sess.createCriteria(Cat.class)

.add( Expression.in("name", new String[] { "Fritz", "Izi", "Pk"} ) )

.add( Expression.disjunction()

.add( Expression.isNull("age") )

.add( Expression.eq("age", new Integer(0) ) )

.add( Expression.eq("age", new Integer(1) ) )

.add( Expression.eq("age", new Integer(2) ) )

) )

.list();

有很多预制的条件类型(Expression的子类)。有一个特别有用,可以让你直接嵌入SQL。

List cats = sess.createCriteria(Cat.class)

.add( Expression.sql("lower($alias.name) like lower(?)", "Fritz%", Hibernate.STRING) )

.list();

其中的{alias}是一个占位符,它将会被所查询实体的行别名所替代。(原文:The {alias} placeholder with be replaced by the row alias of the queried entity.)

3、对结果排序

可以使用net.sf.hibernate.expression.Order对结果集排序.

List cats = sess.createCriteria(Cat.class)

.add( Expression.like("name", "F%")

.addOrder( Order.asc("name") )

.addOrder( Order.desc("age") )

.setMaxResults(50)

.list();

4、关联(Associations)

你可以在关联之间使用createCriteria(),很容易地在存在关系的实体之间指定约束。

List cats = sess.createCriteria(Cat.class)

.add( Expression.like("name", "F%")

.createCriteria("kittens")

.add( Expression.like("name", "F%")

.list();

注意,第二个createCriteria()返回一个Criteria的新实例,指向kittens集合类的元素。

下面的替代形式在特定情况下有用。

List cats = sess.createCriteria(Cat.class)

.createAlias("kittens", "kt")

.createAlias("mate", "mt")

.add( Expression.eqProperty("kt.name", "mt.name") )

.list();

(createAlias())并不会创建一个Criteria的新实例。)

请注意,前面两个查询中Cat实例所持有的kittens集合类并没有通过criteria预先过滤!如果你希望只返回满足条件的kittens,你必须使用returnMaps()。

List cats = sess.createCriteria(Cat.class)

.createCriteria("kittens", "kt")

.add( Expression.eq("name", "F%") )

.returnMaps()

.list();

Iterator iter=cats.iterator();while( iter.hasNext() ) {

Map map=(Map) iter.next();

Cat cat=(Cat) map.get(Criteria.ROOT_ALIAS);

Cat kitten= (Cat) map.get("kt");

}

5、动态关联对象获取(Dynamic association fetching)

可以在运行时通过setFetchMode()来改变关联对象自动获取的策略。

List cats = sess.createCriteria(Cat.class)

.add( Expression.like("name", "Fritz%") )

.setFetchMode("mate", FetchMode.EAGER)

.list();

这个查询会通过外连接(outer join)同时获得 mate和kittens。

6、根据示例查询(Example queries)

net.sf.hibernate.expression.Example类允许你从指定的实例创造查询条件。

Cat cat = newCat();

cat.setSex('F');

cat.setColor(Color.BLACK);

List results= session.createCriteria(Cat.class)

.add( Example.create(cat) )

.list();

版本属性,表示符属性和关联都会被忽略。默认情况下,null值的属性也被排除在外。

You can adjust how the Example is applied. 你可以调整示例(Example)如何应用。

Example example =Example.create(cat)

.excludeZeroes()//exclude zero valued properties

.excludeProperty("color") //exclude the property named "color"

.ignoreCase() //perform case insensitive string comparisons

.enableLike(); //use like for string comparisons

List results = session.createCriteria(Cat.class)

.add(example)

.list();

你甚至可以用示例对关联对象建立criteria。

List results = session.createCriteria(Cat.class)

.add( Example.create(cat) )

.createCriteria("mate")

.add( Example.create( cat.getMate() ) )

.list();

java+criteriaquery_Hibernate动态条件查询(Criteria Query)相关推荐

  1. NHibernate之旅(4):探索查询之条件查询(Criteria Query)

    本节内容 NHibernate中的查询方法 条件查询(Criteria Query) 1.创建ICriteria实例 2.结果集限制 3.结果集排序 4.一些说明 根据示例查询(Query By Ex ...

  2. hibernate的查询条件lt_hibernate的多条件查询——Criteria Query的应用

    查询数据时,人们往往需要设置查询条件.在SQL或HQL语句中,查询条件常常放在where子句中.此外,Hibernate还支持Criteria查询(Criteria Query),这种查询方式把查询条 ...

  3. springDataJpa入门教程(5)-单表动态条件查询+分页

    springDataJpa入门教程 springDataJpa入门教程(1)-基于springBoot的基本增删改查 springDataJpa入门教程(2)-Specification动态条件查询+ ...

  4. mybatis-plus在Mapper类中使用@select标签进行多表联合动态条件查询

    1.单表动态条件查询 1)单字段作为参数 直接用@param设置的值作为注入就好了 @Select("select * from ppms_person_message where crea ...

  5. java中动态查询条件,Java实现动态添加查询条件

    今天遇到一个问题,就是需要根据前端页面发送的条件查询数据库记录,但是前端发送的条件是不确定的.如果使用mybatis的xml方法可以使用if标签灵活的添加判断条件,但是现在我使用的就是单纯的sql. ...

  6. java hql多条件查询_Hibernate结合JPA编写通用泛型多条件查询

    项目中使用Hibernate和JPA对数据库对象进行实例化,但是生成的方法不支持多条件查询.而如果针对每一个数据库对象进行多条件查询编码,则会变得很麻烦,而且一旦以后发生表结构发生变化,这些方法可能还 ...

  7. jpa多表联查动态_Spring Data JPA 连表动态条件查询

    多表查询在spring data jpa中有两种实现方式,第一种是利用hibernate的级联查询来实现(使用较为复杂,查询不够灵活),第二种是使用原生sql查询. JPA原生SQL连表查询 @Rep ...

  8. oracle 动态条件查询语句,教您Oracle动态查询语句的用法

    Oracle动态查询语句是一类特殊的查询语句,下面就为您详细介绍Oracle动态查询语句的语法,如果您对Oracle动态查询方面感兴趣的话,不妨一看. 1. 当使用EXECUTE IMMEDIATE语 ...

  9. java通用分页条件查询_通用分页查询

    packagecom.dao;importjava.sql.ResultSet;importjava.sql.SQLException;importjava.util.ArrayList;import ...

最新文章

  1. 如何挂载另一个lvm硬盘
  2. python装饰器实例-python 装饰器的使用示例
  3. 超级有用的15个mysqlbinlog命令
  4. javascript arguments 特殊 对象
  5. Fibonacci数列整除性质的组合证明
  6. 云计算技术前景怎么样?
  7. 将文件标记为 side-effect-free(无副作用)
  8. 收集 一些Oracle账号
  9. ui uview 安卓开发_HarmonyOS 2.0手机开发者Beta公测招募
  10. 全国青少年编程等级考试scratch三级真题2019年3月(含题库答题软件账号)
  11. 小程序轮播图测试用例
  12. 交安ABC考试单选练习题库
  13. C++实现费氏数列算法
  14. python处理页眉_【python-docx 05】操作页眉和页脚
  15. cups ipp oracle,Linux打印系统CUPS原理分析
  16. android build.versioncodes.kitkat,Android 4.1至4.4 KitKat-为API启用TLS 1.2
  17. 电脑技术分享:电脑怎样录制桌面视频
  18. PAT Basic 1033. 旧键盘打字(20)(C语言实现)
  19. 高等数学:第八章 多元函数的微分法及其应用(3)全微分
  20. 《java与模式》笔记-----抽象类和接口

热门文章

  1. 中大南方学院计算机温澍潜,中大南方学院
  2. 对方不想和你说话 php,对方不想和你聊天的表现,遇到后赶紧放弃
  3. elementui的el-tree第一次加载无法展开和选中的问题
  4. Selenium3自动化测试——17.控制滑动解锁
  5. java框架知识_java框架知识点总结
  6. c mysql存储过程实例_MySQL存储过程实例
  7. linux没有交换分区会怎样,linux – 服务器拒绝使用交换分区
  8. mysql类 php100_PHP100视频教程26:制作自己的PHP+MYSQL的类
  9. java启动 守护进程_java守护进程启动和关闭脚本
  10. wps中的相交_PPT中最好用的一个功能,非它莫属了~