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)的更多相关文章

  1. Hibernate高级查询QBC条件设置——Restrictions用法 引自:http://www.cnblogs.com/evon168/archive/2010/10/29/1863059.html

    方法说明 方法 说明 Restrictions.eq = Restrictions.allEq 利用Map来进行多个等于的限制 Restrictions.gt > Restrictions.ge ...

  2. hibernate模糊查询

    hibernate模糊查询-Restrictions.ilike & Expression.like Criteria criteria = session.createCriteria(Ta ...

  3. Hibernate的查询方式总结

    Hibernate的查询方式大体有三种,分别是HQL QBC和SQL三种.在网上查阅一一些资料,做了一个简单的总结. 1. SQL sql 是面向数据库表查询,from 后面跟的是表名,where 后 ...

  4. Hibernate的查询,二级缓存,连接池

    Hibernate的查询,二级缓存,连接池 1.Hibernate查询数据 Hibernate中的查询方法有5中: 1.1.Get/Load主键查询 使用get或者load方法来查询,两者之间的区别在 ...

  5. Hibernate的查询方式

    Hibernate的查询的方式 OID检索 get或load方法进行的查询 对象导航检索 linkman.getCustomer(); HQL检索 用于接收hql语句进行查询,面向对象查询方式. 通过 ...

  6. Hibernate:查询

    本文内容 OID查询 对象导航查询 HQL查询 QBC查询 SQL查询 首发日期:2018-07-31 hibernate的查询方式: hibernate有很多查询方式 OID查询 对象导航查询: H ...

  7. Hibernate高效查询,只查询部分/指定字段

    公司使用 DetachedCriteria detachedCriteria = DetachedCriteria.forClass(PeBulletin.class); detachedCriter ...

  8. Hibernate常用查询语句

    Hibernate常用查询语句 Hib的检索方式1'导航对象图检索方式.通过已经加载的对象,调用.iterator()方法可以得到order对象如果是首次执行此方法,Hib会从数据库加载关联的orde ...

  9. Hibernate的查询的方式

    Hibernate的查询的方式 在Hibernate中提供了很多种的查询的方式.Hibernate共提供了五种查询方式. Hibernate的查询方式:OID查询 OID检索:Hibernate根据对 ...

随机推荐

  1. python中序列类型

    Python中的序列类型使用 元组类型 一旦被创建,就无法被修改. 创建 使用()或者tuple()创建 creater1=('cat', 'dog', 'tiger', 'human') creat ...

  2. 常见面试SQL问题

    一.表内容 Tdate Tresulte 2019/5/9 胜 2019/5/9 胜 2019/5/9 负 2019/5/9 负 2019/5/10 胜 2019/5/10 负 2019/5/10 负 ...

  3. 121-基于TI DSP TMS320DM8148的全高清1080P 60fs的视频编解码系统 机器人主板

    基于TI DSP TMS320DM8148的全高清1080P 60fs的视频编解码系统 一.板卡概述 本系统基于最先进的DSP技术,构建一个全高清的视频编解码系统,采用TI的芯片.借助TI的DaVin ...

  4. token理解

    什么是JWT Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该token被设计为紧凑且安全的,特别适用于分布式站点 ...

  5. ubuntu 安装php xdebug

    windows 安装xdebug https://www.jetbrains.com/help/phpstorm/configuring-xdebug.html 一.下载 下载与PHP版兼容的Xdeb ...

  6. 05.配置为开发模式、配置静态资源locations、自定义消息转化器、FastJson

    配置为开发模式,代码做了修改,不用重新运行 idea需要该配置,mac测试无效 <dependency> <groupId>org.springframework</gr ...

  7. JMeter简单使用

    JMeter是apache公司基于java开发的一款开源压力测试工具.因为它是java开发的,所以运行的时候必须要安装jdk才可以:Jmeter是免安装的,所以拿到安装包后直接解压就可以使用了,它也是 ...

  8. JS中的setTimeout()函数

    1.setTimeout() 方法 setTimeout() 方法用于在指定的毫秒数后调用函数或执行表达式.返回一个 ID(数字),可以将这个ID传递给 clearTimeout() 来取消执行. s ...

  9. HDU 6040 Hints of sd0061 —— 2017 Multi-University Training 1

    Hints of sd0061 Time Limit: 5000/2500 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others ...

  10. LVS负载均衡中arp_ignore和arp_annonuce参数配置

    先简单的介绍下关于LVS负载均衡 LVS(Linux  Virtual Server)Linux服务器集群系统 针对高可伸缩,高可用服务的需求,给予IP层和内容请求分发的负载均衡调度解决方法,并在Li ...