Hibernate的DetachedCriteria使用(含Criteria)
1、背景了解:Hibernate的三种查询方式
1.1 HQL(Hibernate Query Language)
@Override
public SysUser findUserByLoginName(String pLoginName) {String hql = "from SysUser as u where u.loginName = ?";List<SysUser> users = getHibernateTemplate().find(hql, pLoginName); //pLoginName对应?return users.isEmpty() ? null : users.get(0);
}
@Override
public SysUser findUserByLoginName(String pLoginName) {
String hql = "from SysUser as u where u.loginName = ?";
List<SysUser> users = getHibernateTemplate().find(hql, pLoginName); //pLoginName对应?
return users.isEmpty() ? null : users.get(0);
}
1.2 SQL(Structured Query Language)
static List sql() {Session s = HibernateUtil.getSession();Query q = s.createSQLQuery("select * from user").addEntity(User.class);List<User> rs = q.list();s.close();return rs;
}
static List sql() {
Session s = HibernateUtil.getSession();
Query q = s.createSQLQuery("select * from user").addEntity(User.class);
List<User> rs = q.list();
s.close();
return rs;
}
1.3 QBC(Query By Criteria)
1.3.1 QBC查询的基本步骤
- 使用Session实例的createCriteria()方法创建Criteria对象;
- 使用工具类Restrictions的方法为Criteria对象设置查询条件,Order工具类的方法设置排序方式,Projections工具类的方法进行统计和分组;
- 使用Criteria对象的list()方法进行查询并返回结果。
1.3.2 Restrictions、Order、Projections的常用方法
返回值类型 | 方法名称 | 描述 |
SimpleExpression | Restrictions.eq | 等于(equal) |
Criterion | Restrictions.allEq | 使用Map,Key/Valu进行多个等于的比对 |
SimpleExpression | Restrictions.gt | 大于(great than) |
SimpleExpression | Restrictions.ge | 大于等于(great than or equal) |
SimpleExpression | Restrictions.lt | 小于(less than) |
SimpleExpression | Restrictions.le | 小于等于(less than or equal) |
Criterion | Restrictions.between | 对应SQL的between |
SimpleExpression | Restrictions.like | 对应SQL的like |
Criterion | Restrictions.in | 对应SQL的in |
LogicalExpression | Restrictions.and | and关系 |
LogicalExpression | Restrictions.or | or关系 |
Criterion | Restrictions.isNull | 为空 |
Criterion | Restrictions.sqlRestriction | SQL限定查询 |
返回值类型 | 方法名称 | 描述 |
Order | Order.asc | 升序 |
Order | Order.desc | 降序 |
返回值类型 | 方法名称 | 描述 |
AggregateProjection | Projections.avg | 求平均值 |
CountProjection | Projections.count | 统计某属性的数量 |
CountProjection | Projections.countDistinct | 统计某属性不同值的数量 |
PropertyProjection | Projections.groupProperty | 指定某个属性为分组属性 |
AggregateProjection | Projections.max | 求最大值 |
AggregateProjection | Projections.min | 求最小值 |
ProjectionList | Projections.projectionList | 创建一个ProjectionList对象 |
Projection | Projections.rowCount | 查询结果集中的记录条数 |
AggregateProjection | Projections.sum | 求某属性的合计 |
1.3.3 QBC的查询示例和基本理解
//查询匹配的账户adminList
Criteria c=s.createCriteria(Admin.class);
c.add(Restrictions.eq("aname",name));//eq是等于,gt是大于,lt是小于,or是或
c.add(Restrictions.eq("apassword", password));
List<Admin> list=c.list();
//查询匹配的账户adminList
Criteria c=s.createCriteria(Admin.class);
c.add(Restrictions.eq("aname",name));//eq是等于,gt是大于,lt是小于,or是或
c.add(Restrictions.eq("apassword", password));
List<Admin> list=c.list();
//分页查询前10条
Criteria criteria = session.createCriteria(Customer.class);
criteria.addOrder( Order.asc("name") ); //排序方式
criteria.setFirstResult(0);
criteria.setMaxResults(10);
List result = criteria.list()
//分页查询前10条
Criteria criteria = session.createCriteria(Customer.class);
criteria.addOrder( Order.asc("name") ); //排序方式
criteria.setFirstResult(0);
criteria.setMaxResults(10);
List result = criteria.list()
//查找age等于(eq)20或(or)age为空(isNull)的User
Criteria criteria = session.createCriteria(User.class);
criteria.add(Restrictions.or( Restrictions.eq("age", new Integer(20)), Restrictions.isNull("age") ));
List users = criteria.list();//实际上它产生的对应的sql如下
Hibernate:
select this_.id as id0_0_, this_.name as name0_0_, this_.age as age0_0_
from T_USER this_
where (this_.age=? or this_.age is null)
//查找age等于(eq)20或(or)age为空(isNull)的User
Criteria criteria = session.createCriteria(User.class);
criteria.add(Restrictions.or( Restrictions.eq("age", new Integer(20)), Restrictions.isNull("age") ));
List users = criteria.list();
//实际上它产生的对应的sql如下
Hibernate:
select
this_.id as id0_0_, this_.name as name0_0_, this_.age as age0_0_
from
T_USER this_
where
(this_.age=? or this_.age is null)
1.3.4 复合查询
Criteria criteria = session.createCriteria(Clazz.class);
Criteria criteriaInner = criteria.createCriteria(Student.class);
criteriaInner.add(Restrictions.eq("name", "Bob"));
List clazzList = criteria.list();
Criteria criteria = session.createCriteria(Clazz.class);
Criteria criteriaInner = criteria.createCriteria(Student.class);
criteriaInner.add(Restrictions.eq("name", "Bob"));
List clazzList = criteria.list();
Member member = MemberHelper.getCurrentLoginMember();
DetachedCriteria criteria = DetachedCriteria.forClass(Picture.class);
DetachedCriteria collectCriteria = criteria.createCriteria("collectRecordList");
collectCriteria.add(Restrictions.eq("member", member));
List<Picture> pictureList = Picture.listByCriteria(criteria, page, Order.desc("updateDate"));
Member member = MemberHelper.getCurrentLoginMember();
DetachedCriteria criteria = DetachedCriteria.forClass(Picture.class);
DetachedCriteria collectCriteria = criteria.createCriteria("collectRecordList");
collectCriteria.add(Restrictions.eq("member", member));
List<Picture> pictureList = Picture.listByCriteria(criteria, page, Order.desc("updateDate"));
1.3.5 Hibernate中Criteria方式的基本使用流程
- Criteria创建 --> session.createCriteria(Class persistentClass) (更多重载参考)
- 条件添加 --> add(Criterion criterion) 限定条件、 addOrder(Order order) 限定顺序、 setProjection(Projection projection) 限定统计动作
- 结果返回 --> list()
2、DetachedCriteria是什么,和Criteria有什么区别
3、DetachedCriteria的基本使用
//查询id为1且在今天或今天之前出生的user的名单
//1、创建DetachedCriteria并设置条件
DetachedCriteria dc = DetachedCriteria.forClass(User.class);
int id = 1;
dc.add(Restrictions.eq("id", id));
Date age = new Date();
dc.add(Restrictions.le("birthday", age));//2、执行查询(Criteria getExecutableCriteria(Session session))
Session session = HibernateUtil.getSession();
Criteria c = dc.getExecutableCriteria(session);
List users = c.list();
//查询id为1且在今天或今天之前出生的user的名单
//1、创建DetachedCriteria并设置条件
DetachedCriteria dc = DetachedCriteria.forClass(User.class);
int id = 1;
dc.add(Restrictions.eq("id", id));
Date age = new Date();
dc.add(Restrictions.le("birthday", age));
//2、执行查询(Criteria getExecutableCriteria(Session session))
Session session = HibernateUtil.getSession();
Criteria c = dc.getExecutableCriteria(session);
List users = c.list();
org.hibernate.criterionClass DetachedCriteriagetExecutableCriteriapublic Criteria getExecutableCriteria(Session session)
Get an executable instance of Criteria, to actually run the query.
org.hibernate.criterion
Class DetachedCriteria
getExecutableCriteria
public Criteria getExecutableCriteria(Session session)
Get an executable instance of Criteria, to actually run the query.
4、参考链接
- ** hibernate 查询方式汇总
- * Hibernate 中Criteria 的使用介绍
- Hibernate中DetachedCriteria的使用
- Hibernate框架之Criteria查询 和注解
转载于:https://www.cnblogs.com/deng-cc/p/6428599.html
Hibernate的DetachedCriteria使用(含Criteria)相关推荐
- Hibernate的DetachedCriteria使用(含Criteria)转载
https://www.cnblogs.com/deng-cc/p/6428599.html 1.背景了解:Hibernate的三种查询方式 Hibernate总的来说共有三种查询方式:HQL.QBC ...
- hibernate学习之四——Query和Criteria接口
Query 和 Criteria 接口是 Hibernate 的查询接口,用于向数据库查询对象以及控制执行查询的过程. Query 实例包装了一个 HQL(Hibernate Query Langua ...
- Hibernate之DetachedCriteria类详解
首先看DetachedCriteria这个类名,是由两个单词(detached和criteria)组成的,Criteria咱们知道是QBC查询主要接口之一,它通过组装各种Criterion对象来获取实 ...
- Hibernate事实:始终检查Criteria API SQL查询
Criteria API对于动态构建查询非常有用,但这是我使用它的唯一用例. 每当您有一个带有N个过滤器且可以以任意M个组合到达的UI时,就应该有一个API动态地构造查询,因为连接字符串始终是我所不愿 ...
- 391、Java框架46 -【Hibernate - 查询HQL、查询Criteria、查询标准SQL】 2020.10.19
0.目录 1.HQL 2.使用HQL,根据name进行模糊查询 3.查询Criteria 4.使用Criteria,根据name进行模糊查询 5.查询-标准SQL 6.使用标准SQL,根据name进行 ...
- Hibernate 框架(三)—— Criteria 查询(Criteria 5.2以前和5.2以后的API和使用)
文章目录 一.Criteria 查询 1.Criteria 查询概述 2.Criteria 5.2 以前的API和使用 3.Criteria 5.2 以后的API和使用 一.Criteria 查询 1 ...
- 转:Hibernate中Criteria和DetachedCriteria的完整用法
原文地址:http://blog.sina.com.cn/s/blog_667528fd0100rkrf.html 设计上可以灵活的根据 Criteria 的特点来方便地进行查询条件的组装.现在对 H ...
- hibernate中criteria的一些用法
最近在项目中使用 Spring 和 Hibernate 进行开发,有感于 Criteria 比较好用,在查询方法 设计上可以灵活的根据 Criteria 的特点来方便地进行查询条件的组装.现在对 ...
- Hibernate - DetachedCriteria 的完整用法
2019独角兽企业重金招聘Python工程师标准>>> 现在对 Hibernate的Criteria 的用法进行总结: Hibernate 设计了 CriteriaSpeci ...
最新文章
- IT十八掌作业_java基础第十八天_项目完善
- Django中配置自定义日志系统
- 64 bit Ubuntu support 32 bit binary
- 构造函数必须是public吗_c++ 构造函数,析构函数必须要给成公有的吗?
- 组合数学--约瑟夫环问题 Josephus
- 00038oracle,ORACLE错误一览表
- 【Antlr】Antlr 资料 学习 网站
- ios键盘横屏_平板电脑就只能追剧玩游戏?看这款外设键盘如何让iPad爱上办公...
- web前端网页设计作业_如何学习网页前端设计培训?
- 配置ouster雷达过程
- 实战SATA硬盘安装64位XP(转)
- 日志报错:kernel: blk_update_request: I/O error, dev fd0, sector 0
- 阿里云禁止root用户直接登录的解决办法
- python综合程序设计——做一个可视化大屏
- 如何用Java读取单元格的数据_Java读取Excel中的单元格数据
- 贴图知识汇总: 漫反射贴图、凹凸贴图、高光贴图、 AO贴图、环境贴图、 光照纹理及细节贴图
- IP/tzgm.php,龙之异界手游私服双端APP+本地更新+Gm授权+附视频教程
- Dart - function
- 机械手臂类机器人应用存在的问题
- wireshark不显示随身wifi热点问题的解决
热门文章
- HP1020打印机“传递给系统调用的数据区域太小” 如何处理?
- Settings(系统设置app)
- Visual Entity 下载列表(最新版为 2.0.0 ,已支持Visual Studio 2013)
- Exchange Server 2010安装测试
- comsol线圈不能加电流激励_为什么电压互感器不能短路,电流互感器不得开路?...
- CIC滤波器的Matlab仿真与FPGA实现
- 若使用numba.cuda.jit加速pytorch训练代码会怎样
- 【游戏开发】基于VS2017的OpenGL开发环境搭建
- nginx在windows里面配置
- Mysql主从复制及Tomcat的相关介绍