QBC查询
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();
- 用Oracle的眼光来学习MySQL 5.7的sys(下)(r11笔记第25天)
- HDUOJ-----Climbing Worm
- 闪回原理测试(二)(r11笔记第23天)
- SQL复习之为数据库用户赋予权限
- linux下syscall函数,SYS_gettid,SYS_tgkill
- 数据库收缩数据文件的尝试(三)(r11笔记第22天)
- 再议-Golang语言MessageBox用法实例
- linux下通过go语言获得系统进程cpu使用情况的方法
- Golang语言版ssh口令破解工具 --必须亲自敲代码,否则看了白看
- MySQL中insert语句没有响应的问题分析(r11笔记第21天)
- MySQL级联复制中的数据同步(第二篇)(r11笔记第21天)
- Golang语言 - 以任意类型的slices作为输入参数
- HDUOJ-------The Hardest Problem Ever
- Golang语言--【社区推荐阅读】 fmt用法
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Linux tr命令的使用方法
- Linux man命令的具体使用
- Linux locate命令的使用方法
- 解决linux系统中运行node进程却无法杀死进程的问题
- 5分钟搭建一个WebRTC视频聊天
- redis妙用-应用场景
- 详解Linux中几个获取硬件详细信息的命令
- Linux系统用户管理命令小结
- Linux用if判断目录是否存在实例方法
- CentOS 8.1下搭建LEMP(Linux+Nginx+MySQL+PHP)环境(教程详解)
- Linux echo文本处理命令的使用及示例
- redis妙用-string类型
- redis妙用-hash类型
- redis妙用-list类型
- redis妙用-set类型