1、基本语法

  1. session.beginTransaction();
  2. Criteria criteria = session.createCriteria(Person.class);
  3. SimpleExpression gt = Restrictions.eq("name","张三");
  4. criteria.add(gt);
  5. List<Person> list = criteria.list();
A、Criteria setFirstResult(int firstResult):设置查询返回的第一行记录(索引从0开始);
 
B、Criteria setMaxResult(int maxResult):设置查询返回的记录数;
 
C、Criteria add(Criterion criterion):增加查询条件
 
D、Criteria addOrder(Order order):增加排序规则,例如addOrder(Order.desc("type"));
 
E、static eq | ne | gt | ge | lt | le(String propertyName,Object value),判断指定属性值是否等于,不等于,大于,大于等于,小于,小于等于指定值
 
F、static Criterion between(String propertyName,Object lo,Object hi)判断属性值在某个值范围之内
 
G、static Criterion like(String propertyName,Object value),判断属性值匹配某个字符串,不区分大小写,条件字符串要不是完整的字符串去匹配,要不采用%通配符进行匹配
 
H、static Criterion ilike(String propertyName,String value,MatchMode matchMode),判断属性值匹配某个字段,不区分大小写,模式是以判断以某个字符串开头或者结尾等,这个匹配字符串可以是整个值的字符串,也可以是其中的一部分,也可以使用%通配符.

MatchMode.START:字符串在最前面的位置.相当于"like 'key%'"
MatchMode.END:字符串在最后面的位置.相当于"like '%key'"
MatchMode.ANYWHERE:字符串在中间匹配.相当于"like '%key%'"
MatchMode.EXACT:字符串精确匹配.相当于"like 'key'

J、static Criterion in(String propertyName,Collection values)判断属性值在在某个集合内
 
K、static Criterion in(String propertyName,Object[] values)判断属性值是数组元素的其中之一
 
L、static Criterion isNull(String propertyName) 判断属性值是否为空
 
M、static Criterion sqlRestriction(String sql)直接使用sql语句作为筛选条件,例如:.add(Restrictions.sqlRestriction("type > 15"))
 
N、static Criterion not(Criterion expression)  对Criterion求反,两个条件进行嵌套,例如.add(Restrictions.not(Restrictions.eq("name", "cname")))

2、关联与动态关联

1> Criteria createCriteria(String associationPath):使用默认的连接方式进行关联
 
2> Criteria createCriteria(String associationPath,JoinType joinType):以JoinType指定的连接方式进行关联;支持INNER_JOIN、LEFT_OUTER_JOIN、RIGHT_OUTER_JOIN、FULL_JOIN等枚举值;
 
3> Criteria createCriteria(String associationPath,String alias):该方法的功能与第一个方法的功能基本相似,只是该方法允许为关联实体指定别名;
 
4> Criteria createCriteria(String associationPath,String alias,JoinType joinType):该方法的功能与第二个方法的功能基本相似,只是该方法允许为关联实体指定别名;
 
5> Criteria createCriteria(String associationPath,String alias,JoinType joinType,Criterion withClause):该方法的功能最强大,该方法既可为关联实体指定别名,也可指定连接类型,还可以通过withClause指定自定义的连接条件---这个可用于实现非等值连接;
 
createAlias()方法并不是创建一个新的Criteria实例,他只是给关联实体(包括集合里包含的关联实体)起一个别名,让后面的过滤条件可根据该关联实体进行筛选;
 
  1. Criteria criteria = session.createCriteria(Student.class,"s");
  2. criteria.add(Restrictions.eq("id",1));
  3. List list = criteria.createCriteria("room","r",JoinType.INNER_JOIN).list();
  4. for (Object object : list){
  5. Student student=(Student)object;
  6. System.out.println(student.getName());
  7. System.out.println(student.getId());
  8. ClassRoom room = student.getRoom();
  9. System.out.println(room.getId());
  10. System.out.println(room.getName());
  11. }

3、投影、聚合和分组

Hibernate 的条件过滤中使用 Projection 代表投影运算,Projection 是一个接口,而 Projections 作为 Projection 的工厂,负责生成 Projection 对象;
 
一旦产生了 Projection 对象之后,就可以通过 Criteria 提供的 setProjection(Projection projection) 方法来进行投影运算。
 
1> AggregateProjection avg(String propertyname):计算特定属性的平均值,类似于avg函数;
 
2> CountProjection count(String propertyname):统计查询结果在某列上的记录条数,类似于count(column)函数;
 
3> CountProjection countDistinct(String propertyname):统计查询结果在某列上不重复的记录条数,类似于count(distinct column)函数;
 
4> PropertyProjection groupProperty(String propertyname):将查询结果按某列上的值进行分组,类似于添加group by子句;
 
5> AggregateProjection max(String propertyname):统计查询结果在某列上的最大值,类似于max函数;
 
6> AggregateProjection min(String propertyname):统计查询结果在某列上的最小值,类似于min函数;
 
7> Projection rowCount():统计查询结果的记录条数,类似于count(*)的功能;
 
8> AggregateProjection sum(String propertyname):统计查询结果在某列上的总和,类似于sum函数;
 
  1. //使用createCriteria开始条件查询
  2. List list = sess.createCriteria(Enrolment.class)
  3. .createAlias("student", "s")
  4. .setProjection(Projections.projectionList()
  5. //统计记录条数
  6. .add(Projections.rowCount())
  7. //统计选择该课程里最大的学生姓名
  8. .add(Projections.max("s.name"))
  9. //按照course进行分组
  10. .add(Projections.groupProperty("course")))
  11. .list();

QBC查询的更多相关文章

  1. Hibernate5.2之QBC查询

                                                         Hibernate5.2值QBC查询 一.简介  Hibenate的QBC查询个人认为是Hib ...

  2. [原创]java WEB学习笔记92:Hibernate学习之路-- -QBC 检索和本地 SQL 检索:基本的QBC 查询,带 AND 和 OR 的QBC,统计查询,排序,分页

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  3. Hibernate之QBC查询与本地SQL查询

    1. QBC查询:     QBC 查询就是通过使用Hibernate提供的QueryByCriteria API 来查询对象,这种API封装了SQL语句的动态拼装,对查询提供了更加面向对象的功能接口 ...

  4. hibernate_05_hibernateHQL查询QBC查询和SQL查询

    1.HQL简介:HQL是Hibernate Query Language(Hibernate 查询语言)的缩写,提供更加丰富灵活.更为强大的查询能力:HQL更接近SQL语句查询语法.Hibernate ...

  5. Hibernate4.3 QBC查询

    一.基本查询 1 Session session = HibernateUtils.getSession(); 2 //创建QBC查询接口的实现类 3 Criteria criteria = sess ...

  6. Hibernate中createCriteria即QBC查询的详细用法 .Hibernate中createCriteria即QBC查询的详细用法 .

    现在假设有一个Student类,内有id,name,age属性String hql = "from Student s";按照以前的做法,我们通常是Query query = se ...

  7. QBC查询、离线条件查询(DetachedCriteric)和分页查询模版

    一.QBC检索步骤 QBC检索步骤: 1.调用Session的createCriteria()方法创建一个Criteria对象. 2.设定查询条件.Expression类提供了一系列用于设定查询条件的 ...

  8. Hibernate中createCriteria即QBC查询的详细用法

    现在假设有一个Student类,内有id,name,age属性String hql = "from Student s";按照以前的做法,我们通常是Query query = se ...

  9. Hibernate学习第4天--HQL——QBC查询详解,抓取策略优化。

    上次课回顾: l  Hibernate的一对多 n  表与表之间关系 u  一对多关系 u  多对多关系 u  一对一关系 n  Hibernate的一对多配置 u  搭建Hibernate基本环境 ...

随机推荐

  1. 使用VS2015将解决方案同步更新到Github上

    如今开源已经是一种趋势与潮流了,今天就来谈一谈如何将利用VS将我们的解决方案同步更新到Github上. 第一步:登录自己的Github账号(没有的自行注册). 我的Github登录后的界面: 第二步: ...

  2. oracle的insert的时候&符号如何插入(转义)

    chr(38)替换& insert   into   table   values( 'http://localhost:8080/index.action?username=138& ...

  3. 线上分享会.net框架“ABP”分享会总结

    前言 为了能够帮助.Net开发者开拓视野,更好的把最新的技术应用到工作中,我在3月底受邀到如鹏网.net训练营直播间为各位学弟学妹们进行ABP框架的直播分享.同时为了让更多的.NET开发者了解ABP框 ...

  4. Java基础学习

    1,基本类型和引用类型 基本类型就是一个盒子,数据本身就保存在盒子里面,引用类型的盒子里放的是数据的五:地址,通过这个地址来找到数据. 基本数据类型和堆中对象的引用保存在栈中,引用类型保存在堆中. 2 ...

  5. mysql常用技能分享

    一,MySQL查询的五种子句: 1,where(条件查询),常用的运算符: ①比较运算符 > , < , = , != , >= , <= , in( ) , between ...

  6. 一条SQL搞定信息增益的计算

    欢迎大家关注腾讯云技术社区-博客园官方主页,我们将持续在博客园为大家推荐技术精品文章哦~ 周东谕,2011年加入腾讯,现任职于腾讯互娱运营部数据中心,主要从事游戏相关的数据分析和挖掘工作. 信息增益原 ...

  7. Python 一行代码

    Python语法十分便捷,通过几个简单例子了解其趣味 1.Fizz.Buzz问题为: 打印数字1到100, 3的倍数打印"Fizz", 5的倍数打印"Buzz" ...

  8. C++ 窗口可改风格

    SetWindowLong(m_hWnd,GWL_STYLE,::GetWindowLong(m_hWnd,GWL_STYLE)& ~WS_MAXIMIZEBOX);//去掉最大化 GWL_S ...

  9. 浅析JS中的模块规范AMD和CMD

    一.AMD AMD就只有一个接口:define(id?,dependencies?,factory); 它要在声明模块的时候制定所有的依赖(dep),并且还要当做形参传到factory中,像这样: d ...

  10. 热爱H5

    我不去想是否能够功成名就既然选择了前端便只顾埋头于无声 我不去想能否赢得掌声既然钟情于IT就勇敢得踏步前行 我不去想前行的路上会不会日暮穷途既然目标是未来留给现在的只能是汗水 我不去想所谓的成功是不是 ...