Hibernate Criterion是Criteria的查询条件。Criteria 提供了add(Criterion criterion)方法来添加查询条件。Criteria 的特点来方便地进行查询条件的组装。

Criteria的常用方法:

1. 创建一个Criteria 实例

org.hibernate.Criteria接口表示特定持久类的一个查询。Session是 Criteria实例的工厂。

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

crit.setMaxResults(50);

List cats = crit.list();

2. 限制结果集内容

一个单独的查询条件是org.hibernate.criterion.Criterion 接口的一个实例。

org.hibernate.criterion.Restrictions类定义了获得某些内置Criterion类型的工厂方法。

List cats = sess.createCriteria(Cat.class).add( Restrictions.like("name", "Fritz%") )

.add( Restrictions.between("weight", minWeight, maxWeight) ).list();

约束也可以按逻辑分组。

List cats = sess.createCriteria(Cat.class).add( Restrictions.like("name", "Fritz%") )

.add( Restrictions.or(

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

Restrictions.isNull("age")

) ).list();

List cats = sess.createCriteria(Cat.class).add( Restrictions.in( "name", new String[] { "Fritz", "Izi", "Pk" } ) ).add( Restrictions.disjunction()

.add( Restrictions.isNull("age") )

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

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

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

) ).list();

3. 结果集排序

使用org.hibernate.criterion.Order来为查询结果排序。

List cats = sess.createCriteria(Cat.class).add( Restrictions.like("name", "F%")

.addOrder( Order.asc("name") ).addOrder( Order.desc("age") ).setMaxResults(50)

.list();

List cats = sess.createCriteria(Cat.class).add( Property.forName("name").like("F%") ).addOrder( Property.forName("name").asc() ).addOrder( Property.forName("age").desc() ).setMaxResults(50).list();

4. 关联

使用createCriteria()很容易的在互相关联的实体间建立约束。

List cats = sess.createCriteria(Cat.class) .add( Restrictions.like("name", "F%")

.createCriteria("kittens").add( Restrictions.like("name", "F%").list();

5. 查询示例

org.hibernate.criterion.Example类允许通过一个给定实例来构建一个条件查询。

Cat cat = new Cat();

cat.setSex('F');

cat.setColor(Color.BLACK);

List results = session.createCriteria(Cat.class).add( Example.create(cat) ) .list();

6. 投影(Projections)、聚合(aggregation)和分组(grouping)

org.hibernate.criterion.Projections是 Projection 的实例工厂。一般通过调用

setProjection()应用投影到一个查询。

List results = session.createCriteria(Cat.class).setProjection( Projections.rowCount() ).add( Restrictions.eq("color", Color.BLACK) ).list();

List results = session.createCriteria(Cat.class).setProjection( Projections.projectionList()

.add( Projections.rowCount() )

.add( Projections.avg("weight") )

.add( Projections.max("weight") )

.add( Projections.groupProperty("color") )).list();

   在一个条件查询中没有必要显式的使用 "group by" 。某些投影类型就是被定义为分组投影,而这些投影类型也出现在SQL的group by子句中。 可以选择把一个别名指派给一个投影,这样可以使投影值被约束或排序所引用。

下面是两种不同的实现方式:

List results = session.createCriteria(Cat.class).setProjection(

Projections.alias( Projections.groupProperty("color"), "colr" ) ).addOrder( Order.asc("colr") ).list();

List results = session.createCriteria(Cat.class).setProjection(

Projections.groupProperty("color").as("colr") ).addOrder( Order.asc("colr") ).list();

alias()和as()方法简便的将一个投影实例包装到另外一个 别名的Projection实例中。简而言之,当你添加一个投影到一个投影列表中时你可以为它指定一个别名:

List results = session.createCriteria(Cat.class)

.setProjection( Projections.projectionList()

.add( Projections.rowCount(), "catCountByColor" )

.add( Projections.avg("weight"), "avgWeight" )

.add( Projections.max("weight"), "maxWeight" )

.add( Projections.groupProperty("color"), "color" )

)

.addOrder( Order.desc("catCountByColor") )

.addOrder( Order.desc("avgWeight") )

.list();

List results = session.createCriteria(Domestic.class, "cat")

.createAlias("kittens", "kit")

.setProjection( Projections.projectionList()

.add( Projections.property("cat.name"), "catName" )

.add( Projections.property("kit.name"), "kitName" )

)

.addOrder( Order.asc("catName") )

.addOrder( Order.asc("kitName") )

.list();

原文链接:https://blog.csdn.net/wenbing2610/article/details/84477441

java criterion_hibernate Criterion和Criteria相关推荐

  1. Criterion和Criteria

    Hibernate Criterion是Criteria的查询条件.Criteria 提供了add(Criterion criterion)方法来添加查询条件.Criteria 的特点来方便地进行查询 ...

  2. es java api 子查询,criteria 子查询 es

    elasticsearch.core.query中Criteria类各个方法详解--CSDN... 2016年2月25日 asticsearch.core.query中Criteria类各个方法详解 ...

  3. java方法criterion_java – JPA Criteria谓词条件

    首先,您必须考虑以分层方式重新构建应用程序.您至少需要3层,DAO,服务和WebService. 有关数据库和JPA的所有内容都必须位于DAO层中.所有与json相关的东西都必须在你的WebServi ...

  4. java datediff函数_JPA Criteria 中 DATEDIFF 函数的使用

    项目中有个查询使用了很多 left join 语句,查询出来的总记录数有二十几万条,而每次查询时就只要查询某一天的数据,及时这样分页查询时依旧很慢. 优化时把条件一个一个删掉,发现日期条件比较那里消耗 ...

  5. java jpa hibernate_java - JPA和Hibernate - Criteria与JPQL或HQL

    java - JPA和Hibernate - Criteria与JPQL或HQL 使用Criteria或HQL有哪些优缺点? Criteria API是一种很好的面向对象的方式来表达Hibernate ...

  6. Hibernate Criteria的 Criterion,Projection,Restrictions等条件设置

    在查询方法设计上可以灵活的根据Criteria的特点来方便地进行查询条件的组装. Hibernate设计了CriteriaSpecification作为Criteria的父接口,下面提供了Criter ...

  7. java criteria and_在java中Criteria 的具体使用方法

    展开全部 最近在项目32313133353236313431303231363533e4b893e5b19e31333264623161中使用 Spring 和 Hibernate 进行开发,有感于 ...

  8. java 声明静态类_java静态类声明--java类可以声明为static吗

    为了理解static关键字在类声明中的使用,首先我们需要了解类声明.有两种类,一种是top-level class:一种是inner class. Top-level classes top-leve ...

  9. 【Java 新建项目】使用程序对新项目的各个实体 创建Dao、DaoImpl、Service、ServiceImpl层的文件...

    优化之后的步骤: 1.第一步 生成各层文件夹,并且创建GenericDao.java等基础dao[基础dao中涉及到的包名等自行更改] 2.第二步 生成各个实体对应的Dao等层文件 首先给出基本Dao ...

最新文章

  1. 机器学习面试:这25个实用又有深度的问题
  2. 机器学习Sklearn实战——梯度提升树二分类原理
  3. 深度之眼 | 《如何高效度论文》笔记
  4. 关于Linq to DataSet
  5. 上厕所时间超长也能被开除?法院:超出正常生理需求范围!
  6. c++ 对象数组_ArrayList实现分析(一)——对象创建
  7. sql 异常除非另外还指定了 TOP、OFFSET 或 FOR XML,否则,ORDER BY 子句在视图、内联函数、派生表、子查询和公用表表达式中无效。...
  8. 纹理坐标不在[0,1]内时的纹理效果
  9. touch事件详解【译文】
  10. 普通进销存管理系统设计
  11. 运算放大器-偏置电流是怎样影响运放电路的
  12. 什么是Automata(I): Web 3.0的最后一块拼图
  13. 再次使用vue-awesome-swiper做异形轮播
  14. 导航条样式代码【代码库】
  15. JAVA 并发编程-多个线程之间共享数据(六)
  16. 图像进行反转:白变黑,黑变白
  17. Go语言学习笔记 (网络编程)
  18. threejs易忘点1
  19. 运筹学问题用matlab解答,运筹学课程设计(论文)-用matlab和lingo求解生产问题
  20. kubernetes 之 ingress-nginx 概述

热门文章

  1. jenkins 解决服务器远程启动jar方法无响应的方法
  2. 12306泄露信息查询工具 12306回应信息泄露
  3. c语言fabs函数的返回值,fabs()函数
  4. 阿里云云盾证书是什么?云盾证书有什么作用?
  5. 用HTML和JavaScript写的RSA加密小工具
  6. amcharts4 总结
  7. 微信配置JS接口安全域名问题-Nginx配置
  8. Sandy的卡片[SDOI2008]
  9. IE代理服务器没有响应 浏览器无法打开网页解决方法
  10. 东财《金融法X》综合作业