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

相关文章

Linux线程之线程的创建、属性、回收、退出、取消方式

《Linux线程之线程的创建、属性、回收、退出、取消方式》文章总结了线程管理核心知识:线程号唯一、创建方式、属性设置(如分离状态与栈大小)、回收机制(join/detach)、退出方法(返回/pthr... 目录1. 线程号2. 线程的创建3. 线程属性4. 线程的回收5. 线程的退出6. 线程的取消7.

MySQL 多列 IN 查询之语法、性能与实战技巧(最新整理)

《MySQL多列IN查询之语法、性能与实战技巧(最新整理)》本文详解MySQL多列IN查询,对比传统OR写法,强调其简洁高效,适合批量匹配复合键,通过联合索引、分批次优化提升性能,兼容多种数据库... 目录一、基础语法:多列 IN 的两种写法1. 直接值列表2. 子查询二、对比传统 OR 的写法三、性能分析

golang程序打包成脚本部署到Linux系统方式

《golang程序打包成脚本部署到Linux系统方式》Golang程序通过本地编译(设置GOOS为linux生成无后缀二进制文件),上传至Linux服务器后赋权执行,使用nohup命令实现后台运行,完... 目录本地编译golang程序上传Golang二进制文件到linux服务器总结本地编译Golang程序

Linux下删除乱码文件和目录的实现方式

《Linux下删除乱码文件和目录的实现方式》:本文主要介绍Linux下删除乱码文件和目录的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux下删除乱码文件和目录方法1方法2总结Linux下删除乱码文件和目录方法1使用ls -i命令找到文件或目录

Linux在线解压jar包的实现方式

《Linux在线解压jar包的实现方式》:本文主要介绍Linux在线解压jar包的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux在线解压jar包解压 jar包的步骤总结Linux在线解压jar包在 Centos 中解压 jar 包可以使用 u

Jenkins分布式集群配置方式

《Jenkins分布式集群配置方式》:本文主要介绍Jenkins分布式集群配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1.安装jenkins2.配置集群总结Jenkins是一个开源项目,它提供了一个容易使用的持续集成系统,并且提供了大量的plugin满

Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式

《Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式》本文详细介绍如何使用Java通过JDBC连接MySQL数据库,包括下载驱动、配置Eclipse环境、检测数据库连接等关键步骤,... 目录一、下载驱动包二、放jar包三、检测数据库连接JavaJava 如何使用 JDBC 连接 mys

C#读写文本文件的多种方式详解

《C#读写文本文件的多种方式详解》这篇文章主要为大家详细介绍了C#中各种常用的文件读写方式,包括文本文件,二进制文件、CSV文件、JSON文件等,有需要的小伙伴可以参考一下... 目录一、文本文件读写1. 使用 File 类的静态方法2. 使用 StreamReader 和 StreamWriter二、二进

从入门到精通MySQL联合查询

《从入门到精通MySQL联合查询》:本文主要介绍从入门到精通MySQL联合查询,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下... 目录摘要1. 多表联合查询时mysql内部原理2. 内连接3. 外连接4. 自连接5. 子查询6. 合并查询7. 插入查询结果摘要前面我们学习了数据库设计时要满

MySQL查询JSON数组字段包含特定字符串的方法

《MySQL查询JSON数组字段包含特定字符串的方法》在MySQL数据库中,当某个字段存储的是JSON数组,需要查询数组中包含特定字符串的记录时传统的LIKE语句无法直接使用,下面小编就为大家介绍两种... 目录问题背景解决方案对比1. 精确匹配方案(推荐)2. 模糊匹配方案参数化查询示例使用场景建议性能优