java criterion_hibernate Criterion和Criteria
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相关推荐
- Criterion和Criteria
Hibernate Criterion是Criteria的查询条件.Criteria 提供了add(Criterion criterion)方法来添加查询条件.Criteria 的特点来方便地进行查询 ...
- es java api 子查询,criteria 子查询 es
elasticsearch.core.query中Criteria类各个方法详解--CSDN... 2016年2月25日 asticsearch.core.query中Criteria类各个方法详解 ...
- java方法criterion_java – JPA Criteria谓词条件
首先,您必须考虑以分层方式重新构建应用程序.您至少需要3层,DAO,服务和WebService. 有关数据库和JPA的所有内容都必须位于DAO层中.所有与json相关的东西都必须在你的WebServi ...
- java datediff函数_JPA Criteria 中 DATEDIFF 函数的使用
项目中有个查询使用了很多 left join 语句,查询出来的总记录数有二十几万条,而每次查询时就只要查询某一天的数据,及时这样分页查询时依旧很慢. 优化时把条件一个一个删掉,发现日期条件比较那里消耗 ...
- java jpa hibernate_java - JPA和Hibernate - Criteria与JPQL或HQL
java - JPA和Hibernate - Criteria与JPQL或HQL 使用Criteria或HQL有哪些优缺点? Criteria API是一种很好的面向对象的方式来表达Hibernate ...
- Hibernate Criteria的 Criterion,Projection,Restrictions等条件设置
在查询方法设计上可以灵活的根据Criteria的特点来方便地进行查询条件的组装. Hibernate设计了CriteriaSpecification作为Criteria的父接口,下面提供了Criter ...
- java criteria and_在java中Criteria 的具体使用方法
展开全部 最近在项目32313133353236313431303231363533e4b893e5b19e31333264623161中使用 Spring 和 Hibernate 进行开发,有感于 ...
- java 声明静态类_java静态类声明--java类可以声明为static吗
为了理解static关键字在类声明中的使用,首先我们需要了解类声明.有两种类,一种是top-level class:一种是inner class. Top-level classes top-leve ...
- 【Java 新建项目】使用程序对新项目的各个实体 创建Dao、DaoImpl、Service、ServiceImpl层的文件...
优化之后的步骤: 1.第一步 生成各层文件夹,并且创建GenericDao.java等基础dao[基础dao中涉及到的包名等自行更改] 2.第二步 生成各个实体对应的Dao等层文件 首先给出基本Dao ...
最新文章
- 机器学习面试:这25个实用又有深度的问题
- 机器学习Sklearn实战——梯度提升树二分类原理
- 深度之眼 | 《如何高效度论文》笔记
- 关于Linq to DataSet
- 上厕所时间超长也能被开除?法院:超出正常生理需求范围!
- c++ 对象数组_ArrayList实现分析(一)——对象创建
- sql 异常除非另外还指定了 TOP、OFFSET 或 FOR XML,否则,ORDER BY 子句在视图、内联函数、派生表、子查询和公用表表达式中无效。...
- 纹理坐标不在[0,1]内时的纹理效果
- touch事件详解【译文】
- 普通进销存管理系统设计
- 运算放大器-偏置电流是怎样影响运放电路的
- 什么是Automata(I): Web 3.0的最后一块拼图
- 再次使用vue-awesome-swiper做异形轮播
- 导航条样式代码【代码库】
- JAVA 并发编程-多个线程之间共享数据(六)
- 图像进行反转:白变黑,黑变白
- Go语言学习笔记 (网络编程)
- threejs易忘点1
- 运筹学问题用matlab解答,运筹学课程设计(论文)-用matlab和lingo求解生产问题
- kubernetes 之 ingress-nginx 概述