Hibernate的DetachedCriteria使用(含Criteria)转载
https://www.cnblogs.com/deng-cc/p/6428599.html
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);
}
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;
}
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();
//分页查询前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)
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();
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();
org.hibernate.criterion
Class DetachedCriteria
getExecutableCriteria
public Criteria getExecutableCriteria(Session session)
Get an executable instance of Criteria, to actually run the query.
4、参考链接
Hibernate的DetachedCriteria使用(含Criteria)转载的更多相关文章
- Hibernate的DetachedCriteria使用(含Criteria)
1.背景了解:Hibernate的三种查询方式 Hibernate总的来说共有三种查询方式:HQL.QBC和SQL三种,这里做简单的概念介绍,不详细进行展开. 1.1 HQL(Hibernate Qu ...
- hibernate 中createQuery与createSQLQuery(转载)
息: java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to com.miracle.dm.doc.catalog.mo ...
- JavaWeb_(Hibernate框架)Hibernate中数据查询语句Criteria基本用法
Criteria进行数据查询与HQL和SQL的区别是Criteria完全是面向对象的方式在进行数据查询,将不再看到有sql语句的痕迹,使用Criteria 查询数据包括以下步骤: 1. 通过sessi ...
- 五 Hibernate的其他API,Query&Criteria&SQLQuery
Query Criteria SQLQuery Query接口:用于接收HQL,用于查询多个对象 HQL:Hibernate Query Language Query条件查询: Query分页查询: ...
- hibernate主键生成策略(转载)
http://www.cnblogs.com/kakafra/archive/2012/09/16/2687569.html 1.assigned 主键由外部程序负责生成,在 save() 之前必须指 ...
- hibernate中 inverse的用法(转载)
http://blog.csdn.net/xiaoxian8023/article/details/15380529 一.Inverse是hibernate双向关系中的基本概念.inverse的真正作 ...
- [原理][源代码解析]spring中@Transactional,Propagation.SUPPORTS,以及 Hibernate Session,以及jdbc Connection关系---转载
问题: 一. 1. Spring 如何处理propagation=Propagation.SUPPORTS? 2. Spring 何时生成HibernateSession ? 3. propagati ...
- Hibernate 、Hql查询和Criteria查询
HQL查询: public Object query(String name){ Session s=null; try{ s=HibernateSessionFactory.getSession() ...
- hibernate的QBC查询之Criteria用法
//return (DeliverCost) super.getSession().createCriteria(getMyClass()).add(Restrictions.eq("isd ...
随机推荐
- day20 作业
目录 今日作业 1.下面这段代码的输出结果将是什么?请解释. 2.多重继承的执行顺序,请解答以下输出结果是什么?并解释. 3.什么是新式类,什么是经典类,二者有什么区别?什么是深度优先,什么是广度优先 ...
- Django WSGI响应过程之WSGIHandler
class WSGIHandler(base.BaseHandler): request_class = WSGIRequest def __init__(self, *args, **kwargs) ...
- apt-get正在等待报头(waiting for headers)
可能的解决方法 1. 删除/var/cache/apt/archives/下的所有文件.可能是上次没有成功导致遗留了部分文件. 2. 如果使用的是代理,需要检查DNS.如果机器不能连接DNS服务器,要 ...
- Python - 基本数据类型及其常用的方法之列表
列表: 特点:用 [] 括起来,切元素用逗号分隔:列表内的元素可以为任何的数据类型. 列表的基本操作: 1.修改 li = [12, 5, 6, ["Aiden", [2, 4], ...
- 差分进化算法(DE)的C++面向对象方法实现
代码来源于网络,写得非常棒 /*DE_test *对相应的Matlab程序进行测试 */ #include <iostream> #include <cmath> #inclu ...
- UVA1391/LA3713 Astronauts
题意:有A.B.C3个任务分配给n个宇航员,其中每个宇航员恰好分配一个任务.假设n个宇航员的平均年龄为x,只有年龄大于x的才能领取A任务:只有年龄严格小于x的才能领取B任务,而任务C没有限制.有m对宇 ...
- 跟我一起了解koa(一)
安装koa2 1.初始化package.json npm init 2.新建app.js,并且安装koa cnpm install --save koa //app.js const koa = re ...
- HDU1709
/* * 好奇怪的母函数 */ #include<cstdio> #include<cstring> #include<cmath> #include<a ...
- 【solr】schemaFactory配置相关schema.xml
schemaFactory配置相关schema.xml 关于schemaFactory的配置困扰我半天啦,下面来总结一下. 话说,好像是从5.0以后就已经没有schema.xml啦,这是由于Solr ...
- cmd下带参数执行python文件
在一个文件下下创建程序代码, sys.argv 即后续cmd中需要传入的参数列表, sys.argv[0]即要执行的文件名 sys.argv[n]即参数的字符串 # -*- c ...