Criteria Query通过面向对象化的设计,将数据查询条件封装为一个对象。简单来讲,Criteria Query可以看作是传统SQL的对象化表示,如:
Java代码
Criteria criteria = session.createCriteria(User.class);
criteria.add(Expression.eq("name","Erica"));
criteria.add(Expression.eq("sex",new Integer(1)));
Criteria 查询表达式
Criteria 本身只是一个查询容器,具体的查询条件需要通过Criteria.add方法添加到Criteria实例中。 如前例所示,Expression 对象具体描述了查询条件。针对SQL 语法,Expression提供了对应的查询限定机制,包括:
Java代码
Expression.eq 对应SQL“field = value”表达式。 如Expression.eq("name","Erica")
Expression.allEq 参数为一个Map对象,其中包含了多个属性-值对应关系。相当于多个Expression.eq关系的叠加。
Expression.gt 对应SQL中的 “field > value ” 表达式
Expression.ge 对应SQL中的 “field >= value” 表达式
Expression.lt 对应SQL中的 “field < value” 表达式
Expression.le 对应SQL中的 “field <= value” 表达式
Expression.between 对应SQL中的 “between” 表达式
如下面的表达式表示年龄(age)位于13到50区间内。
Java代码
Expression.between("age",new Integer(13),new Integer(50));
表达式
Java代码
Expression.in 对应SQL中的 ”field in …” 表达式
Expression.eqProperty 用于比较两个属性之间的值,对应SQL中的“field = field”。 如:
Expression.eqProperty( "TUser.groupID", "TGroup.id" );
Expression.gtProperty 用于比较两个属性之间的值,对应SQL中的“field > field”。
Expression.geProperty 用于比较两个属性之间的值,对应SQL中的“field >= field”。
Expression.ltProperty 用于比较两个属性之间的值,对应SQL中的“field < field”。
Expression.leProperty 用于比较两个属性之间的值,对应SQL中的“field <= field”。
Expression.and and关系组合。 如:
Expression.and( Expression.eq("name","Erica"), Expression.eq( "sex", new Integer(1) ) );
Expression.or or关系组合。 如:
Expression.or( Expression.eq("name","Erica"), Expression.eq("name","Emma") );
Expression.sql 作为补充,本方法提供了原生SQL语法的支持。我们可以通过这个方法直接通过SQL语句限定查询条件。 下面的代码返回所有名称以“Erica”起始的记录:
Java代码
Expression.sql( “lower({alias}.name) like lower(?)”, "Erica%", Hibernate.STRING );
Expression.sql( “lower({alias}.name) like lower(?)”, "Erica%", Hibernate.STRING );
其中的“{alias}”将由Hibernate在运行期使用当前关联的POJO别名替换。 注意Expression 各方法中的属性名参数(如Express.eq中的第一个参数),这里 所谓属性名是POJO中对应实际库表字段的属性名(大小写敏感),而非库表中的实际字段名称。
Criteria 高级特性
限定返回的记录范围
通过criteria. setFirstResult/setMaxResults 方法可以限制一次查询返回的记录范围:
Java代码
Criteria criteria = session.createCriteria(TUser.class);
//限定查询返回检索结果中,从第一百条结果开始的20条记录
criteria.setFirstResult(100);
criteria.setMaxResults(20);
对查询结果进行排序
//查询所有groupId=2的记录
//并分别按照姓名(顺序)和groupId(逆序)排序
Criteria criteria = session.createCriteria(TUser.class);
criteria.add(Expression.eq("groupId",new Integer(2)));
criteria.addOrder(Order.asc("name"));
criteria.addOrder(Order.desc("groupId"));
Criteria criteria = session.createCriteria(TUser.class);
//限定查询返回检索结果中,从第一百条结果开始的20条记录
criteria.setFirstResult(100);
criteria.setMaxResults(20);
对查询结果进行排序
//查询所有groupId=2的记录
//并分别按照姓名(顺序)和groupId(逆序)排序
Criteria criteria = session.createCriteria(TUser.class);
criteria.add(Expression.eq("groupId",new Integer(2)));
criteria.addOrder(Order.asc("name"));
criteria.addOrder(Order.desc("groupId"));
Java代码
Criteria criteria = session.createCriteria(User.class);
criteria.add(Expression.eq("name","Erica"));
criteria.add(Expression.eq("sex",new Integer(1)));
Criteria 查询表达式
Criteria 本身只是一个查询容器,具体的查询条件需要通过Criteria.add方法添加到Criteria实例中。 如前例所示,Expression 对象具体描述了查询条件。针对SQL 语法,Expression提供了对应的查询限定机制,包括:
Java代码
Expression.eq 对应SQL“field = value”表达式。 如Expression.eq("name","Erica")
Expression.allEq 参数为一个Map对象,其中包含了多个属性-值对应关系。相当于多个Expression.eq关系的叠加。
Expression.gt 对应SQL中的 “field > value ” 表达式
Expression.ge 对应SQL中的 “field >= value” 表达式
Expression.lt 对应SQL中的 “field < value” 表达式
Expression.le 对应SQL中的 “field <= value” 表达式
Expression.between 对应SQL中的 “between” 表达式
如下面的表达式表示年龄(age)位于13到50区间内。
Java代码
Expression.between("age",new Integer(13),new Integer(50));
表达式
Java代码
Expression.in 对应SQL中的 ”field in …” 表达式
Expression.eqProperty 用于比较两个属性之间的值,对应SQL中的“field = field”。 如:
Expression.eqProperty( "TUser.groupID", "TGroup.id" );
Expression.gtProperty 用于比较两个属性之间的值,对应SQL中的“field > field”。
Expression.geProperty 用于比较两个属性之间的值,对应SQL中的“field >= field”。
Expression.ltProperty 用于比较两个属性之间的值,对应SQL中的“field < field”。
Expression.leProperty 用于比较两个属性之间的值,对应SQL中的“field <= field”。
Expression.and and关系组合。 如:
Expression.and( Expression.eq("name","Erica"), Expression.eq( "sex", new Integer(1) ) );
Expression.or or关系组合。 如:
Expression.or( Expression.eq("name","Erica"), Expression.eq("name","Emma") );
Expression.sql 作为补充,本方法提供了原生SQL语法的支持。我们可以通过这个方法直接通过SQL语句限定查询条件。 下面的代码返回所有名称以“Erica”起始的记录:
Java代码
Expression.sql( “lower({alias}.name) like lower(?)”, "Erica%", Hibernate.STRING );
Expression.sql( “lower({alias}.name) like lower(?)”, "Erica%", Hibernate.STRING );
其中的“{alias}”将由Hibernate在运行期使用当前关联的POJO别名替换。 注意Expression 各方法中的属性名参数(如Express.eq中的第一个参数),这里 所谓属性名是POJO中对应实际库表字段的属性名(大小写敏感),而非库表中的实际字段名称。
Criteria 高级特性
限定返回的记录范围
通过criteria. setFirstResult/setMaxResults 方法可以限制一次查询返回的记录范围:
Java代码
Criteria criteria = session.createCriteria(TUser.class);
//限定查询返回检索结果中,从第一百条结果开始的20条记录
criteria.setFirstResult(100);
criteria.setMaxResults(20);
对查询结果进行排序
//查询所有groupId=2的记录
//并分别按照姓名(顺序)和groupId(逆序)排序
Criteria criteria = session.createCriteria(TUser.class);
criteria.add(Expression.eq("groupId",new Integer(2)));
criteria.addOrder(Order.asc("name"));
criteria.addOrder(Order.desc("groupId"));
Criteria criteria = session.createCriteria(TUser.class);
//限定查询返回检索结果中,从第一百条结果开始的20条记录
criteria.setFirstResult(100);
criteria.setMaxResults(20);
对查询结果进行排序
//查询所有groupId=2的记录
//并分别按照姓名(顺序)和groupId(逆序)排序
Criteria criteria = session.createCriteria(TUser.class);
criteria.add(Expression.eq("groupId",new Integer(2)));
criteria.addOrder(Order.asc("name"));
criteria.addOrder(Order.desc("groupId"));
发表评论
-
List<Map> 排序
2016-08-03 11:03 899import java.util.ArrayList; im ... -
sql存储过程几个简单例子
2016-07-22 08:42 416导读:sql存储是数据库操作过程中比较重要的一个环节,对于一些 ... -
相对路径和绝对路径的区别,java获取项目访问路径的方法
2016-07-19 13:58 616相对路径和绝对路径的区别 在HTML里只要涉及文件的地方( ... -
POI 单元格
2016-07-07 11:48 433POI 单元格合并中的CellRangeAddress 参数: ... -
Java的内存机制
2016-06-28 11:40 5421.Java的内存机制 Java 把内存划分成两种:一种是 ... -
StringBuffer和StringBuilder的区别
2016-06-28 11:36 397StringBuffer、StringBuilder和Stri ... -
平均分割list
2016-06-26 19:22 1186private static List<List< ... -
定时任务&&找出两个list的不同
2016-06-21 13:55 334/*-------------------------appl ... -
时间类
2016-06-21 13:38 489/* * Licensed to the Apache S ... -
常用map总结
2016-06-21 09:39 384Map map = new HashMap(); I ... -
遍历listmap 遍历map
2016-04-27 16:23 506package excel; import java ... -
SQL 递归
2016-03-29 14:34 473向上 WITH RECURSIVE r AS ( SELE ... -
oracle 面试题
2016-02-02 15:53 9581、对数据库SQL2005、ORACLE熟悉吗? SQL ... -
List和ArrayList的区别
2016-01-28 09:38 490List和ArrayList的区别 List是一个接口,而Li ... -
StringUtils.isEmpty用法
2016-01-28 09:21 639StringUtils 方法的操作对象是 java.lang. ... -
java中重载与重写的区别
2016-01-27 13:50 484java中重载与重写的区别 ... -
loginfilter
2016-01-26 16:02 304dabdabdabdabdabdabdab -
数据库连接driverClass和jdbcUrl大全
2016-01-25 14:09 1110一、MySQL: driverClass:com.mysql ... -
postgre--(待补)
2016-01-18 10:49 477postgre--(待补) -
查询并删除重复记录的SQL语句
2015-11-20 15:38 567查询及删除重复记录的SQL语句 1、查找表中 ...
相关推荐
Hibernate中Criteria的完整用法
Hibernat 使用Criteria查询多对多关系(SET集合)条件
javax.persistence.criteria.CriteriaQuery.class javax.persistence.criteria.Expression.class javax.persistence.criteria.Fetch.class javax.persistence.criteria.FetchParent.class javax.persistence....
Hibernate中使用Criteria Query各种QBC查询
Hibernate, JDO, Criteria Query, and many others try to hide SQL itself, minimising its scope to things called JPQL, HQL, JDOQL and various other inferior query languages jOOQ has come to fill this gap...
条件查询(Criteria Query).....................................................................................24 根据示例查询(Query By Example) ............................................................
【资源说明】 1、基于Java+Springboot+MySQL+Thymeleaf ... Page<Film> filmPage = filmRepository.findAll((root, criteriaQuery, cb) -> { Predicate predicate = cb.conjunction(); if (film != null) { if (Str
JPA-Criteria模块实现了JPA的Criteria API,但由Blaze-Persistence Core API支持,因此您可以从CriteriaQuery对象中获取查询构建器。 借助Spring Data或DeltaSpike Data集成,您可以轻松地在现有存储库中使用Blaze-...
条件查询(Criteria Query) 12.1. 创建一个Criteria实例 12.2. 缩小结果集范围 12.3. 对结果排序 12.4. 关联(Associations) 12.5. 动态关联对象获取(Dynamic association fetching) 12.6. ...
条件查询(Criteria Query) 12.1. 创建一个Criteria实例 12.2. 缩小结果集范围 12.3. 对结果排序 12.4. 关联(Associations) 12.5. 动态关联对象获取(Dynamic association fetching) 12.6. ...
Criteria Query...............................................................................33 Criteria 查询表达式 ................................................................ 33 Criteria 高级...
QBE (Query By Example) Criteria cri = session.createCriteria(Student.class); cri.add(Example.create(s)); //s是一个Student对象 list cri.list(); 实质:创建一个模版,比如我有一个表serial有一个 giftortoy...
CriteriaQuery< Long> cq = qb . createQuery( Long . class); cq . select(qb . count(cq . from( MyEntity . class))); cq . where( /* your stuff */ ); return entityManager . createQuery(cq) . ...
数据查询与检索是Hibernate中的一... *标准化对象查询(Criteria Query):以对象的方式进行查询,将查询语句封装为对象操作。优点:可读性好,符合Java程序员的编码习惯。缺点:不够成熟,不支持投影(projection)或统
MockDatabase-开发 一个模拟数据库,用于对Hibernate Criteria,Query和SQLQuery进行单元测试。
JPA 动态查询 Criteria JPQL 语法详解 Java Persistence Query Language
详细介绍了criteria的使用方法和许多相关查询技巧
如果希望通过编程的方式创建查询,Hibernate提供了完善的按条件(Query By Criteria, QBC)以及按样例(Query By Example, QBE)进行Hibernate查询的功能。 你也可以用原生SQL(native SQL)描述Hibernate查询,Hibernate...