Hibernate具有三种查询方式:
HQL(Hibernate Query Language)检索
QBC(Query By Criteria)检索
Native SQL检索
以上三种查询方式都是通过Session对象
来操作的
HQL查询:
是完全面向对象的查询语句,查询功能非常强大,具备继承、多态和关联等特性 。
Hibernate使用Query接口来执行HQL语句,类似jdbc使用的PreparedStatement。
HQL语句不区分大小写,但是实体类及其属性例外
使用Query进行查询的步骤
:
创建Query对象
Query query = session.createQuery(“hql”);
绑定动态参数
执行查询/更新语句
使用占位符?指定参数:
例:“from User u where u.age > ?”
query.setInteger(0, 20);
参数的索引从0开始
使用命名参数指定参数:
例: “from User u where u.age > :age”
query.setInteger(“age”, 20);
正确设置时间类型
query.setTime 时分秒
query.setDate 日期
query.setTimestamp 日期+时分秒
list()
返回List对象,可以按索引随机访问对象
iterator()
返回Iterator对象,只能按从前到后的顺序依次访问对象
uniqueResult()
返回一个结果对象,一般确认结果集中只有一个符合条件的对象才使用此方法
技巧:可以使用setMaxResults()来限制个数
executeUpdate()
执行delete/update语句
如果实体类命名冲突,可使用完全类名形式
“from com.ourchr.hib.entity.User ”
查询所有用户信息
session.createQuery(“from User”).list();
查询年龄大于20的所有用户信息
session.createQuery(“from User u where u.age > 20”).list();
单个属性查询
session.createQuery(“select u.name from User u”).list();
返回的结果集中的对象是String类型
多属性查询
session.createQuery(“select u.name, u.password from User u”).list();
返回的结果集中是Object[]类型的数据,其长度等于属性列的个数
实体和属性混合查询
session.createQuery(“select u, u.name from User u”).list();
返回一个Object[]类型结果集,第一个元素是User对象,第二个元素是一个String对象
使用Query.executeUpdate()来执行操作:
让所有用户的年龄加1
session.createQuery(“update User set age = age + 1”).executeUpdate();
删除所有年龄小于10的用户
session.createQuery(“delete User where age < 10”).executeUpdate();
常规风格
Query query = session.createQuery(“from User u where u.age > ?”);
query.setInteger(0, 10);
List users = query.list();
方法链风格
List users = session.createQuery(“from User u where u.age > ?”).setInteger(0, 10).list();
分页查询:
设置最多查询多少条记录
query.setMaxResults(n)
设置从原始结果集中取最终结果的开始下标
query.setFirstResult(n)
Eg: 查询第10到19条记录
query.setFirstResult(10).setMaxResult(10)
级联查询:
session.createQuery("from Student s left join fetch
s.clazz where s.name=:name")
注意不能使用left join Clazz c on …
以下配置对HQL查询不起作用:
<set name="students" fetch="join" >…
如果Student与Address之间存在一对的关联,则只要查询Student,系统会自动查询出对应的Address,不管是使用session.get还是query进行查询。
假定Clazz与Student存在一对多关联,则查询Clazz时并不会自动查询对应的Student。
使用query查询对应的班级信息时,set元素中的fetch配置将不起作用。默认情况下也不会级联查询学员信息。可以使用如下方案来实现级联查询。
方案一:
Clazz c = (Clazz)session.createQuery(“from Clazz c where …”).uniqueResult();
c.getStudents().size();
//以上第一行代码将查询到班级信息,第二行代码将查询到班级对应的学生信息,共执行两次查询。
方案二:
Clazz c = (Clazz)session.createQuery(“from Clazz c left join fetch c.students where …”).uniqueResult();
//以上查询班级时将自动通过左外连接查询对应的学生信息。共执行一次查询。
分享到:
相关推荐
实例详解 语法 Hibernate HQL
HQL通过new的方式可以返回一个新的实体类,比如说上面通过new User(id,name)方式将id,name返回给User,要求User必须包含一个相对应的构造函数,否则会抛出异常,同时我们还有应该给User指定一个默认的构造函数,否则...
Criteria查询对查询条件进行了面向对象封装,符合编程人员的思维方式,不过HQL(Hibernate Query Lanaguage)查询提供了更加丰富的和灵活的查询特性,因此Hibernate将HQL查询方式立为官方推荐的标准查询方式,HQL查询...
hibernate概述,hibernate入门Demo,hibernate配置文件详解(全局配置,实体类映射配置),配置实体规则,核心API详解(Configuration,sessionFactory,session,Transaction),hibernate中的对象状态以及刷新能缓存机制 ...
hibernate 查询语言 HQL的使用详解及实例, 个人笔记,适合初学者
Hibernate技术详解 ,为初学者了解hql提供帮助
Hibernate 简介 Hibernate 开发流程 Hibernate 配置文件 Hibernate 核心接口和类 Hibernate ORM映射 HQL Hibernate 懒加载机制与抓取策略 Hibernate 缓存 Hibernate 锁机制
Select/update/delete……from……where……groupby……having……orderby……asc/desc 其中的update/delete为Hibernate3中所新添加的功能,可见HQL查询非常类似于标准SQL查询。
Hibernate应用及其详解,是学习必备的。
C.1 创建带有@hibernate标记的Java源文件 C.2 建立项目的目录结构 C.3 运行XDoclet工具 附录D 发布和运行netstore应用 D.1 运行netstore所需的软件 D.2 netstore应用的目录结构 D.3 安装SAMPLEDB...
讲解如何使用HQL,包括基本的操作和进阶用的高级使用
本文档主要介绍hibernate主要包的作用,还有如何使用HQL查询,事务管理的详解,以及一对一、多对多、一对多、多对一关系的配置实例。还有配置文件中的各个属性的作用说明。
该文档详细讲解了Hibernate的几个核心技术:Hibernate的配置文件、缓存机制、查询策略、事务管理、HQL和QBC、一对多、一对一、多对多映射关系、继承映射等,并且还有配有实例。
开始Hibernate之旅 1.2. 第一个持久化类 1.3. 映射cat 1.4. 与Cat同乐 1.5. 结语 2. Hibernate入门 2.1. 前言 2.2. 第一部分 - 第一个Hibernate程序 2.2.1. 第一个class 2.2.2. 映射文件 2.2.3. ...
C.1 创建带有@hibernate标记的Java源文件 C.2 建立项目的目录结构 C.3 运行XDoclet工具 附录D 发布和运行netstore应用 D.1 运行netstore所需的软件 D.2 netstore应用的目录结构 D.3 安装SAMPLEDB...
C.1 创建带有@hibernate标记的Java源文件 C.2 建立项目的目录结构 C.3 运行XDoclet工具 附录D 发布和运行netstore应用 D.1 运行netstore所需的软件 D.2 netstore应用的目录结构 D.3 安装SAMPLEDB...
C.1 创建带有@hibernate标记的Java源文件 C.2 建立项目的目录结构 C.3 运行XDoclet工具 附录D 发布和运行netstore应用 D.1 运行netstore所需的软件 D.2 netstore应用的目录结构 D.3 安装SAMPLEDB...
第一部分 从Hibernate和EJB 3.0开始 第1章 理解对象/关系持久化 1.1 什么是持久化 1.1.1 关系数据库 1.1.2 理解SQL 1.1.3 在Java中使用SQL 1.1.4 面向对象应用程序中的持久化 1.2 范式不...