Hibernate查询方式——QBC查询方式

2024-02-23 08:32
文章标签 查询 方式 hibernate qbc

本文主要是介绍Hibernate查询方式——QBC查询方式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

参考文:

Hibernate查询方式汇总  http://blog.sina.com.cn/s/blog_7ffb8dd501014a6o.html 

第十一章 Hibernate的查询 Query by Criteria(QBC)  http://ju.outofmemory.cn/entry/30525


Hibernate总的来说共有三种查询方式:HQL、QBC和SQL三种。重点介绍QBC方式,QBC(QueryByCriteria)查询方式是Hibernate提供的“更加面向对象”的一种检索方式。QBC在条件查询上比HQL查询更为灵活,而且支持运行时动态生成查询语句。 

1、在Hibernate应用中使用QBC查询通常经过3个步骤 
 (1)使用Session实例的createCriteria()方法创建Criteria对象 
 (2)使用工具类Restrictions的相关方法为Criteria对象设置查询对象 
 (3)使用Criteria对象的list()方法执行查询,返回查询结果
2、一般的用法:
//查询名字为zhangsan的用户Criteria criteria = session.createCriteria(User.class);criteria.add(Restrictions.eq("username", "zhangsan"));List users = criteria.list();for(User user : users){System.out.println(user.getId() + "--" + user.getUsername());}


3、Restrictions用法

Restrictions类的常用方法:

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.groupProperty 指定某个属性为分组属性
Projections.max 求最大值
Projections.min 求最小值
Projections.projectionList 创建一个ProjectionList对象
Projections.rowCount 查询结果集中的记录条数
Projections.sum 求某属性的合计


实例:

查询id大于100,小于200的用户:

Criteria criteria = session.createCriteria(User.class);criteria.add(Restrictions.gt("id", 100)).add(Restrictions.lt("id", 200));List users = criteria.list();for(User user : users){System.out.println(user.getId() + "--" + user.getUsername());}
4、QBE (Query ByExample)

通过Example工具类,判断Example. create(example)传进来的example对象里面各个属性是否与数据库中配置。

//查询名字为zhanglinlin的所有的用户Criteria criteria = session.createCriteria(User.class);User example = new User();example.setUsername("zhanglinlin");criteria.add(Example.create(example));List users = criteria.list();for(User user : users){System.out.println(user.getId() + "--" + user.getUsername());}


5、Order提供设置排序方式

Order.asc(StringpropertyName) 
升序排序 
Order.desc(StringpropertyName) 
降序排序 

Criteria criteria = session.createCriteria(User.class);User example = new User();example.setUsername("zhanglinlin");criteria.add(Example.create(example));//criteria.addOrder(Order.asc("id"));criteria.addOrder(Order.desc("id"));List users = criteria.list();for(User user : users){System.out.println(user.getId() + "--" + user.getUsername());}

6、Projections提供对查询结果进行统计与分组操作 

Porjections.avg(StringpropertyName) 
求某属性的平均值 
Projections.count(StringpropertyName) 
统计某属性的数量 
Projections.countDistinct(StringpropertyName) 
统计某属性的不同值的数量 
Projections.groupProperty(StringpropertyName) 
指定一组属性值 
Projections.max(StringpropertyName) 
某属性的最大值 
Projections.min(StringpropertyName) 
某属性的最小值 
Projections.projectionList() 
创建一个新的projectionList对象 
Projections.rowCount() 
查询结果集中记录的条数 
Projections.sum(StringpropertyName) 
返回某属性值的合计

//查询有多少个人的名字为zhanglinlin的Criteria criteria = session.createCriteria(User.class);User example = new User();example.setUsername("zhanglinlin");criteria.add(Example.create(example));criteria.setProjection(Projections.count("id"));Integer count = (Integer) criteria.uniqueResult();System.out.println(count);

7、QBC分页查询  

Criteria criteria = session.createCriteria(User.class);User example = new User();example.setUsername("zhanglinlin");criteria.add(Example.create(example));criteria.setFirstResult(0); //从哪一个记录开始criteria.setMaxResults(5);//取多少条记录List users = criteria.list();for(User user : users){System.out.println(user.getId() + "--" + user.getUsername());}


这篇关于Hibernate查询方式——QBC查询方式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/738061

相关文章

虚拟机与物理机的文件共享方式

《虚拟机与物理机的文件共享方式》文章介绍了如何在KaliLinux虚拟机中实现物理机文件夹的直接挂载,以便在虚拟机中方便地读取和使用物理机上的文件,通过设置和配置,可以实现临时挂载和永久挂载,并提供... 目录虚拟机与物理机的文件共享1 虚拟机设置2 验证Kali下分享文件夹功能是否启用3 创建挂载目录4

linux报错INFO:task xxxxxx:634 blocked for more than 120 seconds.三种解决方式

《linux报错INFO:taskxxxxxx:634blockedformorethan120seconds.三种解决方式》文章描述了一个Linux最小系统运行时出现的“hung_ta... 目录1.问题描述2.解决办法2.1 缩小文件系统缓存大小2.2 修改系统IO调度策略2.3 取消120秒时间限制3

Linux alias的三种使用场景方式

《Linuxalias的三种使用场景方式》文章介绍了Linux中`alias`命令的三种使用场景:临时别名、用户级别别名和系统级别别名,临时别名仅在当前终端有效,用户级别别名在当前用户下所有终端有效... 目录linux alias三种使用场景一次性适用于当前用户全局生效,所有用户都可调用删除总结Linux

Oracle查询优化之高效实现仅查询前10条记录的方法与实践

《Oracle查询优化之高效实现仅查询前10条记录的方法与实践》:本文主要介绍Oracle查询优化之高效实现仅查询前10条记录的相关资料,包括使用ROWNUM、ROW_NUMBER()函数、FET... 目录1. 使用 ROWNUM 查询2. 使用 ROW_NUMBER() 函数3. 使用 FETCH FI

数据库oracle用户密码过期查询及解决方案

《数据库oracle用户密码过期查询及解决方案》:本文主要介绍如何处理ORACLE数据库用户密码过期和修改密码期限的问题,包括创建用户、赋予权限、修改密码、解锁用户和设置密码期限,文中通过代码介绍... 目录前言一、创建用户、赋予权限、修改密码、解锁用户和设置期限二、查询用户密码期限和过期后的修改1.查询用

使用SQL语言查询多个Excel表格的操作方法

《使用SQL语言查询多个Excel表格的操作方法》本文介绍了如何使用SQL语言查询多个Excel表格,通过将所有Excel表格放入一个.xlsx文件中,并使用pandas和pandasql库进行读取和... 目录如何用SQL语言查询多个Excel表格如何使用sql查询excel内容1. 简介2. 实现思路3

Mybatis官方生成器的使用方式

《Mybatis官方生成器的使用方式》本文详细介绍了MyBatisGenerator(MBG)的使用方法,通过实际代码示例展示了如何配置Maven插件来自动化生成MyBatis项目所需的实体类、Map... 目录1. MyBATis Generator 简介2. MyBatis Generator 的功能3

Python数据处理之导入导出Excel数据方式

《Python数据处理之导入导出Excel数据方式》Python是Excel数据处理的绝佳工具,通过Pandas和Openpyxl等库可以实现数据的导入、导出和自动化处理,从基础的数据读取和清洗到复杂... 目录python导入导出Excel数据开启数据之旅:为什么Python是Excel数据处理的最佳拍档

SpringBoot项目启动后自动加载系统配置的多种实现方式

《SpringBoot项目启动后自动加载系统配置的多种实现方式》:本文主要介绍SpringBoot项目启动后自动加载系统配置的多种实现方式,并通过代码示例讲解的非常详细,对大家的学习或工作有一定的... 目录1. 使用 CommandLineRunner实现方式:2. 使用 ApplicationRunne

VUE动态绑定class类的三种常用方式及适用场景详解

《VUE动态绑定class类的三种常用方式及适用场景详解》文章介绍了在实际开发中动态绑定class的三种常见情况及其解决方案,包括根据不同的返回值渲染不同的class样式、给模块添加基础样式以及根据设... 目录前言1.动态选择class样式(对象添加:情景一)2.动态添加一个class样式(字符串添加:情