QBC(Query By Criteria) 查询方式

这种方式比较面向对象方式,重点是有三个描述条件的对象:Restrictions,Order,Projections。使用QBC查询,一般需要以下三个步骤:

1.使用Session实例 的createCriteria()方法创建Criteria对象
2.使用工具类Restrictions的方法为Criteria对象设置查询条件,Order工具类的方法设置排序方式,Projections工具类的方法进行统计和分组。
3.使用Criteria对象的list()方法进行查询并返回结果

Restrictions类的常用方法:

方法名称 描述
Restrictions.eq 等于
Restrictions.allEq 使用Map,Key/Valu进行多个等于的比对
Restrictions.gt 大于
Restrictions.ge 大于等于
Restrictions.lt 小于
Restrictions.le 小于等于
Restrictions.between 对应SQL的between
Restrictions.like 对应SQL的like
Restrictions.in 对应SQL的in
Restrictions.and and关系
Restrictions.or or关系
Restrictions.sqlRestriction SQL限定查询

Order类的常用方法:

方法名称 描述
Order.asc 升序
Order.desc 降序

Projections类的常用方法

方法名称 描述
Projections.avg 求平均值
Projections.count 统计某属性的数量
Projections.countDistinct 统计某属性不同值的数量
Projections.max 求最大值
Projections.min 求最小值
Projections.projectionList 创建一个ProjectionList对象
Projections.rowCount 查询结果集中的记录条数
Projections.sum 求某属性的合计

例1: 查询出所有的顾客信息

Criteria criteria = session.createCriteria(Customer.class);
List<Customer> customers = criteria.list();
for(Customer cus : customers){System.out.println(cus);
}

例2: 查询符合条件的顾客的信息(年龄大于12)

Criteria criteria = session.createCriteria(Customer.class);criteria.add(Restrictions.gt("age", 12));List<Customer> customers = criteria.list();for(Customer cus : customers){System.out.println(cus);
}

例3: 查询名字在"terry,larry,tom"之间的用户的信息

Session session = HibernateSessionFactory.getSession();
Transaction tran = session.beginTransaction();
String[] names = {"terry","larry","tom"};
Criteria criteria = session.createCriteria(Customer.class);
criteria.add(Restrictions.in("name", names));
List<Customer> customers = criteria.list();
for(Customer cus : customers){System.out.println(cus);
}

Order 排序

criteria.addOrder() 添加排序约束Order.desc("id") 按照id降序排列Order.asc("id")  按照id升序排列

QBC 离线条件查询

离线条件查询使用的是 DetachedCriteria 接口进行查询,离线条件查询对象在创建的时候不需要使用 Session 对象,在添加条件 时也不需要 Session 对象,只有在查询的时候使用 Session 对象即可,所以叫做离线条件查询。

为什么要有离线条件查询?
一般情况下,在业务层开启 Session 后,在持久层对数据进行操作,而在 web 层需要接收条件查询的若干条件,所以在 web 层就设置条件会很方便,又因为 Criteria 需要由 Session 创建,所以无法在 web 层设置条件,于是离线条件查询出现了。

创建离线条件查询对象

 DetachedCriteria criteria = DetachedCriteria.forClass(Linkman.class);

具体的代码如下,注意顺序,这样是可行的

 DetachedCriteria criteria = DetachedCriteria.forClass(Linkman.class);// 设置查询条件criteria.add(Restrictions.eq("lkm_gender", "男"));Session session = HibernateUtils.getCurrentSession();Transaction tr = session.beginTransaction();// 查询数据List<Linkman> list = criteria.getExecutableCriteria(session).list();for (Linkman linkman : list) {System.out.println(linkman);}tr.commit();

QBE(Query By Example)查询方式

将一个对象的非空属性作为查询条件进行查询。

示例:

   1: Session session = SessionFactory.getCurrentSession();2: User user = new User();3: user.setName("ijse");4: Transaction ts = session.beginTransaction();5: try {6:     Criteria criteria = session.createCriteria(User.class);7:     criteria.add(Example.create(user));8:     user= (User) criteria.list().get(0);    9:     session.commit();10: } catch (HibernateException ex) {11:     ts.rollBack();12:     ex.printStackTrace();13: }14: System.out.println(user.getName());

原文参考文章如下:
https://blog.csdn.net/iijse/article/details/6161143
https://www.jianshu.com/p/242a08e1d3e9
https://www.jianshu.com/p/21bcb31ea80e
https://blog.csdn.net/iijse/article/details/6161143

hibernate查询方式总结(四)之QBC,QBE查询相关推荐

  1. 2021年广东高考成绩短信查询方式,2014年广东高考成绩查询 短信查询方式

    中国教育在线讯 2014年广东省普通高考成绩将于6月25日公布,6月25日12:00时起,考生可通过相关网站.电话和短信等方式查询自己的考试成绩.考生高考成绩单将由各县(区)招生办公室下发给考生.(挑 ...

  2. c语言编写按键的中断和查询方式的区别,中断程序和查询方式的区别

    中断程序在程序开始定义中断入口地址,初始化中必须打开中断允许位,程序运行时不用判断溢出状态位,溢出后硬件清零: 查询方式在程序运行时必须判断溢出状态位,溢出后须软件清零. 查询方式:发送数据--先发后 ...

  3. Hibernate中的QBC查询方式详解

    Hibernate中的QBC查询方式详解 QBC:Query By Criteria,条件查询. 是一种更加面向对象化的查询的方式. 1.QBC简单查询 测试代码: package com.pipi. ...

  4. db4o的SODA查询方式

    一.SODA查询方式的优势 1.底层--db4o查询对象数据查询时使用的查询方式. 2.最终--QBE.NQ查询最终都要转化为SODA查询执行. 3.代码优美,让人感觉思路比较清晰.易读. 4.动态查 ...

  5. jpa分页查询_spring data jpa 居然提供了这么多查询方式!

    spring data jpa提供了多种查询方式,如下: 方法名称查询 继承Repository接口 测试代码 方法名称中支持的关键字(官方文档提供) 使用JPA命名查询 在User实体中定义jpql ...

  6. 查询性能优化(使用 Explain 进行分析、优化数据访问、重构查询方式)、存储引擎(InnoDB/MyISAM)

    1.查询性能优化 1.1 使用 Explain 进行分析 Explain 用来分析 SELECT 查询语句,开发人员可以通过分析 Explain 结果来优化查询语句. 比较重要的字段有: select ...

  7. 【计算机原理与接口技术(UNIX)⑮】——输入/输出系统【查询方式、中断控制方式、DMA 、8237A】

    ✅ 通过对 [计算机与UNIX汇编原理 ① ~ ⑫]的学习,我们已经大致掌握了汇编程序设计的相关知识 接下来,我将其分栏名改为 [计算机原理与接口技术(UNIX) ],重点将放在 "计算机原 ...

  8. 社保、公积金查询方式

    社保.公积金查询方式 社保查询步骤:   1.       登陆网站: 北京市社会保险网上服务平台:http://www.bjld.gov.cn/csibiz/home/ 2.       选择右侧个 ...

  9. 网络信息检索(五)查询处理:查询方式+查询操作

    文章目录 一.查询方式 1:基于关键词的查询 (1)布尔查询 (2)短语查询 (3)近邻查询:短语查询扩展 2:结构查询 3:容错查询(Tolerant Retrieval) (1)模式匹配 (2)拼 ...

最新文章

  1. 【组队学习】【33期】3. 李宏毅机器学习(含深度学习)
  2. ubuntu中命令打开图片、文档、音乐、视频等
  3. wampserver环境下,apache本地下设置多个域名
  4. 如何实现32.5万笔/秒的交易峰值?阿里交易系统TMF2.0技术揭秘
  5. linux cpio(copy in/out) 命令详解
  6. keras模型保存和加载
  7. shell python脚本语言_python脚本里使用shell语句
  8. module_param 在内核编程中的作用
  9. React的Ant Design Pro目录结构
  10. Python非递归实现二叉树的后续遍历
  11. 软件工程编码阶段_软件工程的编码阶段
  12. 使用Docker快速部署禅道V11.6版本
  13. 当当并购重组了,我们还有书读吗?
  14. python列表的存储结构_在python列表类型结构中合理地存储10亿个以上的值
  15. python怎么在图片上写字_Python在图片中添加文字的两种方法
  16. python数据容器专题
  17. 常见OJ提交结果对照表
  18. 公司让微信加人有没有软件_没有人想要使用软件
  19. JavaFX的webview下载文件的一种实现思路
  20. 基于android的影音设计,基于Android系统的影音播放器设 - 音响技术 - 电子发烧友网...

热门文章

  1. 嵌入式Linux驱动学习【8】—— Nand Flash
  2. 堆+贪心——nkoj1587【Usaco Nov07 Gold】分配防晒霜
  3. PPT怎么转换成PDF?有哪些转换方法?
  4. 有没有二维码制作工具?二维码制作其实很简单
  5. Win32 PE病毒原理分析
  6. 闲鱼架构专家,详解亿级C2C电商平台,商品体系架构如何搭建?
  7. 视频云:云巨头们的“新格斗场”
  8. 动态生成模板(模板生成器)
  9. layui框架实战案例(6):上传图片和视频自动调用IOS或安卓系统的摄像头功能
  10. MapReduce 运行机制