1、基本语法

session.beginTransaction();
Criteria criteria = session.createCriteria(Person.class);
SimpleExpression gt = Restrictions.eq("name","张三");
criteria.add(gt);
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实例,他只是给关联实体(包括集合里包含的关联实体)起一个别名,让后面的过滤条件可根据该关联实体进行筛选;
 
Criteria criteria = session.createCriteria(Student.class,"s");
criteria.add(Restrictions.eq("id",1));
List list = criteria.createCriteria("room","r",JoinType.INNER_JOIN).list();
for (Object object : list){
Student student=(Student)object;
System.out.println(student.getName());
System.out.println(student.getId());
ClassRoom room = student.getRoom();
System.out.println(room.getId());
System.out.println(room.getName());
}

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函数;
 
 //使用createCriteria开始条件查询
List list = sess.createCriteria(Enrolment.class)
.createAlias("student", "s")
.setProjection(Projections.projectionList()
//统计记录条数
.add(Projections.rowCount())
//统计选择该课程里最大的学生姓名
.add(Projections.max("s.name"))
//按照course进行分组
.add(Projections.groupProperty("course")))
.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. 【转】AS3操作XML,增加、删除、修改

    var i:Number=0;//用于下面循环 var webcontent:String="Sontin's Blog <b>Welcome to 终吾一生</b> ...

  2. 读书笔记 effective c++ Item 43 了解如何访问模板化基类中的名字

    1. 问题的引入——派生类不会发现模板基类中的名字 假设我们需要写一个应用,使用它可以为不同的公司发送消息.消息可以以加密或者明文(未加密)的方式被发送.如果在编译阶段我们有足够的信息来确定哪个信息会 ...

  3. 1.Maven的安装及配置

    1 Maven 介绍 Maven这个词可以翻译为“知识的积累”,也可以翻译为“专家”或“内行”.本书将介绍Maven这一跨平台的项目管理工具.作为Apache组织中的一个颇为成功的开源项目,Maven ...

  4. Gym 101257G 24 (概率+二分)

    题意: 有一道分值为sa的题,n个人比赛写这道题,按照递减的顺序给出每个人的当前分数,和每个人写不出这道题的概率,让你输出有反超现象出现的期望 思路:由于之前把题目翻译错了导致很久没有相通,后来看了别 ...

  5. 实现高效的GPRS驱动程序

    1. 引言 用过几款GPRS模块,也从淘宝上买过多个GPRS模块,一般的都会送一个驱动程序和使用demo,但是代码质量都较低. 回头看了下几年前使用的GPRS代码,从今天的角度来看,也就是买模块赠送一 ...

  6. day002-HTML知识点总结:浏览器兼容性之指定IE浏览器使用chrome内核渲染页面

    今天再浏览大淘宝首页时,突然看到这么一个东东: ,顿时好费解,莫非万恶的IE浏览器认识到自己以往的罪孽,开始兼容chrome了??! 于是本着不懂就百度的神精,开始纵横于各大铁耙,勃哥,终于找到了许许 ...

  7. oralce set

    1         SET TIMING ON 说明:显示SQL语句的运行时间.默认值为OFF. 在SQLPLUS中使用,时间精确到0.01秒.也就是10毫秒. 在PL/SQL DEVELOPER 中 ...

  8. 设计模式的征途—3.工厂方法(Factory Method)模式

    上一篇的简单工厂模式虽然简单,但是存在一个很严重的问题:当系统中需要引入新产品时,由于静态工厂方法通过所传入参数的不同来创建不同的产品,这必定要修改工厂类的源代码,将违背开闭原则.如何实现新增新产品而 ...

  9. ios 苹果手机硬件摘要

    IPhone4 * 2010年发布. * A4单核处理器. * 3.5英寸Retina显示屏(视网膜屏幕),960x640像素分辨率. * 后置摄像头500万像素. * 前置摄像头30万像素. IPh ...

  10. 对Qt下对话服务器客户端的总结(MyTcpServer与MyTcpClient)

    在汇文培训老师给讲了这个例子.讲的挺好的 Qt编写聊天服务器与客户端主要用到下面两个类: QTcpSocket --- 处理连接的 QTcpServer --- 处理服务器,对接入进行响应,创建每个链 ...