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

相关文章

活用c4d官方开发文档查询代码

当你问AI助手比如豆包,如何用python禁止掉xpresso标签时候,它会提示到 这时候要用到两个东西。https://developers.maxon.net/论坛搜索和开发文档 比如这里我就在官方找到正确的id描述 然后我就把参数标签换过来

内核启动时减少log的方式

内核引导选项 内核引导选项大体上可以分为两类:一类与设备无关、另一类与设备有关。与设备有关的引导选项多如牛毛,需要你自己阅读内核中的相应驱动程序源码以获取其能够接受的引导选项。比如,如果你想知道可以向 AHA1542 SCSI 驱动程序传递哪些引导选项,那么就查看 drivers/scsi/aha1542.c 文件,一般在前面 100 行注释里就可以找到所接受的引导选项说明。大多数选项是通过"_

用命令行的方式启动.netcore webapi

用命令行的方式启动.netcore web项目 进入指定的项目文件夹,比如我发布后的代码放在下面文件夹中 在此地址栏中输入“cmd”,打开命令提示符,进入到发布代码目录 命令行启动.netcore项目的命令为:  dotnet 项目启动文件.dll --urls="http://*:对外端口" --ip="本机ip" --port=项目内部端口 例: dotnet Imagine.M

深入理解RxJava:响应式编程的现代方式

在当今的软件开发世界中,异步编程和事件驱动的架构变得越来越重要。RxJava,作为响应式编程(Reactive Programming)的一个流行库,为Java和Android开发者提供了一种强大的方式来处理异步任务和事件流。本文将深入探讨RxJava的核心概念、优势以及如何在实际项目中应用它。 文章目录 💯 什么是RxJava?💯 响应式编程的优势💯 RxJava的核心概念

【即时通讯】轮询方式实现

技术栈 LayUI、jQuery实现前端效果。django4.2、django-ninja实现后端接口。 代码仓 - 后端 代码仓 - 前端 实现功能 首次访问页面并发送消息时需要设置昵称发送内容为空时要提示用户不能发送空消息前端定时获取消息,然后展示在页面上。 效果展示 首次发送需要设置昵称 发送消息与消息展示 提示用户不能发送空消息 后端接口 发送消息 DB = []@ro

ural 1026. Questions and Answers 查询

1026. Questions and Answers Time limit: 2.0 second Memory limit: 64 MB Background The database of the Pentagon contains a top-secret information. We don’t know what the information is — you

脏页的标记方式详解

脏页的标记方式 一、引言 在数据库系统中,脏页是指那些被修改过但还未写入磁盘的数据页。为了有效地管理这些脏页并确保数据的一致性,数据库需要对脏页进行标记。了解脏页的标记方式对于理解数据库的内部工作机制和优化性能至关重要。 二、脏页产生的过程 当数据库中的数据被修改时,这些修改首先会在内存中的缓冲池(Buffer Pool)中进行。例如,执行一条 UPDATE 语句修改了某一行数据,对应的缓

Mybatis中的like查询

<if test="templateName != null and templateName != ''">AND template_name LIKE CONCAT('%',#{templateName,jdbcType=VARCHAR},'%')</if>

Java 多线程的基本方式

Java 多线程的基本方式 基础实现两种方式: 通过实现Callable 接口方式(可得到返回值):

java面试常见问题之Hibernate总结

1  Hibernate的检索方式 Ø  导航对象图检索(根据已经加载的对象,导航到其他对象。) Ø  OID检索(按照对象的OID来检索对象。) Ø  HQL检索(使用面向对象的HQL查询语言。) Ø  QBC检索(使用QBC(Qurey By Criteria)API来检索对象。 QBC/QBE离线/在线) Ø  本地SQL检索(使用本地数据库的SQL查询语句。) 包括Hibern