九、hibernate的查询(QBC)
QBC:Query By Criteria
- 条件查询
- 比较适合组合条件查询
QBC查询
简单查询
创建Criteria对象:Criteria criteria = session.createCriteria(Children.class);
获取查询的对象集合:List<Children> list = criteria.list();
@Test
public void query() {
Session session = HibernateUtils.getCurrentSession();
Transaction tx = session.beginTransaction(); Criteria criteria = session.createCriteria(Children.class);
List<Children> list = criteria.list(); for (Children children : list) {
System.out.println(children);
} tx.commit();
}
排序查询
addOrder()
- 添加排序方法
Order.desc(属性名)、Order.asc(属性名)
- criteria.addOrder(Order.desc("cid"));//降序
- criteria.addOrder(Order.asc("cid"));//升序
@Test
public void query() {
Session session = HibernateUtils.getCurrentSession();
Transaction tx = session.beginTransaction(); Criteria criteria = session.createCriteria(Children.class);
criteria.addOrder(Order.desc("cid"));//降序
//criteria.addOrder(Order.asc("cid"));//升序
List<Children> list = criteria.list(); for (Children children : list) {
System.out.println(children);
} tx.commit();
}
分页查询
从第几条记录开始:criteria.setFirstResult(int);
一页总共多少条记录:criteria.setMaxResults(int);
@Test
public void query() {
Session session = HibernateUtils.getCurrentSession();
Transaction tx = session.beginTransaction(); Criteria criteria = session.createCriteria(Children.class); criteria.setFirstResult(3);
criteria.setMaxResults(5); List<Children> list = criteria.list(); for (Children children : list) {
System.out.println(children);
} tx.commit();
}
条件查询
criteria.add(Restrictions.eq("sex", '0'));
- add():主要用于添加where后面的条件
- Restrictions:条件
- 条件设置方法
- eq():=
- gt():>
- ge:>=
- le:<=
- lt:<
- ne:<>
- like()、in()、and()、or()、...........
@Test
public void query() {
Session session = HibernateUtils.getCurrentSession();
Transaction tx = session.beginTransaction(); Criteria criteria = session.createCriteria(Children.class); criteria.add(Restrictions.eq("sex", '0')); List<Children> list = criteria.list(); for (Children children : list) {
System.out.println(children);
} tx.commit();
}
分组查询
criteria.setProjection(Projection)
- 添加聚合函数以及group by 、having 的条件
@Test
public void query() {
Session session = HibernateUtils.getCurrentSession();
Transaction tx = session.beginTransaction(); Criteria criteria = session.createCriteria(Children.class); criteria.setProjection(Projections.count("sex")); Object obj = criteria.uniqueResult(); System.out.println(obj); tx.commit();
}
离线条件查询
DetachedCriteria类:可以脱离session使用
使用DetachedCriteria的原因
- 多条件查询的时,需要在Web层封装相应的参数到Criteria,而在Dao层才真正的去执行查询数据库的操作
- session是在dao层开始创建使用的,web层一般不出现session,所以需要从web传递参数并且在dao层拼接sql
- DetachedCriteria可以脱离session使用,可以在web层将查询条件设置完毕,然后传递DetachedCriteria对象即可,不需要传递大量参数、拼接sql
DetachedCriteria的使用
- 创建:DetachedCriteria dc = DetachedCriteria.forClass(Children.class);
- 添加查询条件:dc.add(Restrictions.eq("sex", '1'));
- 绑定session并获取Criteria对象:Criteria criteria = dc.getExecutableCriteria(session);
@Test
public void query() {
Session session = HibernateUtils.getCurrentSession();
Transaction tx = session.beginTransaction(); //模拟web层,不需要session的创建
DetachedCriteria dc = DetachedCriteria.forClass(Children.class);
dc.add(Restrictions.eq("sex", '1')); //模拟dao层,绑定session使用
Criteria criteria = dc.getExecutableCriteria(session);
List<Children> list = criteria.list(); for (Children children : list) {
System.out.println(children);
} tx.commit();
}
九、hibernate的查询(QBC)的更多相关文章
- Hibernate高级查询QBC条件设置——Restrictions用法 引自:http://www.cnblogs.com/evon168/archive/2010/10/29/1863059.html
方法说明 方法 说明 Restrictions.eq = Restrictions.allEq 利用Map来进行多个等于的限制 Restrictions.gt > Restrictions.ge ...
- hibernate模糊查询
hibernate模糊查询-Restrictions.ilike & Expression.like Criteria criteria = session.createCriteria(Ta ...
- Hibernate的查询方式总结
Hibernate的查询方式大体有三种,分别是HQL QBC和SQL三种.在网上查阅一一些资料,做了一个简单的总结. 1. SQL sql 是面向数据库表查询,from 后面跟的是表名,where 后 ...
- Hibernate的查询,二级缓存,连接池
Hibernate的查询,二级缓存,连接池 1.Hibernate查询数据 Hibernate中的查询方法有5中: 1.1.Get/Load主键查询 使用get或者load方法来查询,两者之间的区别在 ...
- Hibernate的查询方式
Hibernate的查询的方式 OID检索 get或load方法进行的查询 对象导航检索 linkman.getCustomer(); HQL检索 用于接收hql语句进行查询,面向对象查询方式. 通过 ...
- Hibernate:查询
本文内容 OID查询 对象导航查询 HQL查询 QBC查询 SQL查询 首发日期:2018-07-31 hibernate的查询方式: hibernate有很多查询方式 OID查询 对象导航查询: H ...
- Hibernate高效查询,只查询部分/指定字段
公司使用 DetachedCriteria detachedCriteria = DetachedCriteria.forClass(PeBulletin.class); detachedCriter ...
- Hibernate常用查询语句
Hibernate常用查询语句 Hib的检索方式1'导航对象图检索方式.通过已经加载的对象,调用.iterator()方法可以得到order对象如果是首次执行此方法,Hib会从数据库加载关联的orde ...
- Hibernate的查询的方式
Hibernate的查询的方式 在Hibernate中提供了很多种的查询的方式.Hibernate共提供了五种查询方式. Hibernate的查询方式:OID查询 OID检索:Hibernate根据对 ...
随机推荐
- RESET - 把一个运行时参数值恢复为缺省值
SYNOPSIS RESET name RESET ALL DESCRIPTION 描述 RESET 将运行时参数恢复为缺省值. RESET 是下面语句的一个变种 SET parameter TO D ...
- javaScript的预加载
在有大量图片的页面中,为了避免页面加载完图片还未加载完成,我们通常会使用js的图片预加载. 这是一个预加载的demo: 首先把图片放入到一个类名为imgSrcArr的变量当中: var imgSrcA ...
- Django前后端分离跨域请求问题
一.问题背景 之前使用django+vue进行前后端分离碰到跨域请求问题,跨域(域名或者端口不同)请求问题的本质是由于浏览器的同源策略导致的,当请求的响应不是处于同一个域名和端口下,浏览器不会接受响应 ...
- mongodb Access control is not enabled for the database 无访问控制解决方案
转载:https://blog.csdn.net/q1056843325/article/details/70941697 今天使用MongoDB时遇到了一些问题 建立数据库连接时出现了warning ...
- Vue通信的10种方式
1.10种通信方式 10种:https://juejin.im/post/5bd18c72e51d455e3f6e4334 2.除此之外,还有children和ref. 需要注意 $children ...
- mybatis源码分析之02配置文件解析
该篇正式开始学习mybatis的源码,本篇主要学习mybatis是如何加载配置文件mybatis-config.xml的, 先从测试代码入手. public class V1Test { public ...
- 4412 SPI驱动
1.Linux主机驱动和外设驱动分离思想(I2C驱动里有) SPI驱动总线架构:SPI核心层(x),SPI控制器驱动层(x),SPI设备驱动层(√).前面两个设备驱动搞明白了可以去看 2.教程中介绍: ...
- Python基础教程(017)--执行Python的方式解释器运行及其他几种解释器简介
前言 了解Python的解释器 内容 Python的解释器乳交有多个语言的实现 cPython---官方版本的C语言实现 Jython--可以运行在java平台 IronPython--可以运行在.n ...
- SPOJ - FTOUR2 (点分治+树状数组)
题目:https://vjudge.net/contest/307753#problem/I 题意:有一颗树,上面有白色黑色点,每个点上有一个权值,权值可以为负,现在我要求一条路径,权值和最大,这条路 ...
- 【靶场练习_upload-labs复现】Pass01-020
文件上传本是要命,挂马成功率更是随缘,我太难了Orz Pass-01:JS <?php phpinfo();?> 1.函数重写: 2.禁用js: Pass-02:MIME Type 修改M ...