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

相关文章

python logging模块详解及其日志定时清理方式

《pythonlogging模块详解及其日志定时清理方式》:本文主要介绍pythonlogging模块详解及其日志定时清理方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录python logging模块及日志定时清理1.创建logger对象2.logging.basicCo

SQL表间关联查询实例详解

《SQL表间关联查询实例详解》本文主要讲解SQL语句中常用的表间关联查询方式,包括:左连接(leftjoin)、右连接(rightjoin)、全连接(fulljoin)、内连接(innerjoin)、... 目录简介样例准备左外连接右外连接全外连接内连接交叉连接自然连接简介本文主要讲解SQL语句中常用的表

C#TextBox设置提示文本方式(SetHintText)

《C#TextBox设置提示文本方式(SetHintText)》:本文主要介绍C#TextBox设置提示文本方式(SetHintText),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录C#TextBox设置提示文本效果展示核心代码总结C#TextBox设置提示文本效果展示核心代

SpringValidation数据校验之约束注解与分组校验方式

《SpringValidation数据校验之约束注解与分组校验方式》本文将深入探讨SpringValidation的核心功能,帮助开发者掌握约束注解的使用技巧和分组校验的高级应用,从而构建更加健壮和可... 目录引言一、Spring Validation基础架构1.1 jsR-380标准与Spring整合1

MySQL高级查询之JOIN、子查询、窗口函数实际案例

《MySQL高级查询之JOIN、子查询、窗口函数实际案例》:本文主要介绍MySQL高级查询之JOIN、子查询、窗口函数实际案例的相关资料,JOIN用于多表关联查询,子查询用于数据筛选和过滤,窗口函... 目录前言1. JOIN(连接查询)1.1 内连接(INNER JOIN)1.2 左连接(LEFT JOI

Android实现打开本地pdf文件的两种方式

《Android实现打开本地pdf文件的两种方式》在现代应用中,PDF格式因其跨平台、稳定性好、展示内容一致等特点,在Android平台上,如何高效地打开本地PDF文件,不仅关系到用户体验,也直接影响... 目录一、项目概述二、相关知识2.1 PDF文件基本概述2.2 android 文件访问与存储权限2.

MySQL 中查询 VARCHAR 类型 JSON 数据的问题记录

《MySQL中查询VARCHAR类型JSON数据的问题记录》在数据库设计中,有时我们会将JSON数据存储在VARCHAR或TEXT类型字段中,本文将详细介绍如何在MySQL中有效查询存储为V... 目录一、问题背景二、mysql jsON 函数2.1 常用 JSON 函数三、查询示例3.1 基本查询3.2

MySQL中的交叉连接、自然连接和内连接查询详解

《MySQL中的交叉连接、自然连接和内连接查询详解》:本文主要介绍MySQL中的交叉连接、自然连接和内连接查询,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、引入二、交php叉连接(cross join)三、自然连接(naturalandroid join)四

mysql的基础语句和外键查询及其语句详解(推荐)

《mysql的基础语句和外键查询及其语句详解(推荐)》:本文主要介绍mysql的基础语句和外键查询及其语句详解(推荐),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋... 目录一、mysql 基础语句1. 数据库操作 创建数据库2. 表操作 创建表3. CRUD 操作二、外键

Spring中配置ContextLoaderListener方式

《Spring中配置ContextLoaderListener方式》:本文主要介绍Spring中配置ContextLoaderListener方式,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录Spring中配置ContextLoaderLishttp://www.chinasem.cntene