`

Hibernate学习之HQL详解1

阅读更多

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();
//以上查询班级时将自动通过左外连接查询对应的学生信息。共执行一次查询。

分享到:
评论

相关推荐

    HQL详解

    实例详解 语法 Hibernate HQL

    Hibernate HQL详解.docx

    HQL通过new的方式可以返回一个新的实体类,比如说上面通过new User(id,name)方式将id,name返回给User,要求User必须包含一个相对应的构造函数,否则会抛出异常,同时我们还有应该给User指定一个默认的构造函数,否则...

    HQL 详解 HQL查询

    Criteria查询对查询条件进行了面向对象封装,符合编程人员的思维方式,不过HQL(Hibernate Query Lanaguage)查询提供了更加丰富的和灵活的查询特性,因此Hibernate将HQL查询方式立为官方推荐的标准查询方式,HQL查询...

    Hibernate学习笔记和资料

    hibernate概述,hibernate入门Demo,hibernate配置文件详解(全局配置,实体类映射配置),配置实体规则,核心API详解(Configuration,sessionFactory,session,Transaction),hibernate中的对象状态以及刷新能缓存机制 ...

    hibernate查询语言--HQL

    hibernate 查询语言 HQL的使用详解及实例, 个人笔记,适合初学者

    Hibernate技术详解

    Hibernate技术详解 ,为初学者了解hql提供帮助

    Hibernate框架 jar 架包 开发详解

    Hibernate 简介 Hibernate 开发流程 Hibernate 配置文件 Hibernate 核心接口和类 Hibernate ORM映射 HQL Hibernate 懒加载机制与抓取策略 Hibernate 缓存 Hibernate 锁机制

    HQL语句详解Select/update/deletefromwhere...

    Select/update/delete……from……where……groupby……having……orderby……asc/desc 其中的update/delete为Hibernate3中所新添加的功能,可见HQL查询非常类似于标准SQL查询。

    Hibernate应用及其详解(强力推荐)

    Hibernate应用及其详解,是学习必备的。

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

     C.1 创建带有@hibernate标记的Java源文件  C.2 建立项目的目录结构  C.3 运行XDoclet工具 附录D 发布和运行netstore应用  D.1 运行netstore所需的软件  D.2 netstore应用的目录结构  D.3 安装SAMPLEDB...

    Hibernate Query Language基础使用详解

    讲解如何使用HQL,包括基本的操作和进阶用的高级使用

    hibernate包的详解以及关系配置实例

    本文档主要介绍hibernate主要包的作用,还有如何使用HQL查询,事务管理的详解,以及一对一、多对多、一对多、多对一关系的配置实例。还有配置文件中的各个属性的作用说明。

    Hibernate详解

    该文档详细讲解了Hibernate的几个核心技术:Hibernate的配置文件、缓存机制、查询策略、事务管理、HQL和QBC、一对多、一对一、多对多映射关系、继承映射等,并且还有配有实例。

    hibernate 框架详解

    开始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. ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part1.rar

     C.1 创建带有@hibernate标记的Java源文件  C.2 建立项目的目录结构  C.3 运行XDoclet工具 附录D 发布和运行netstore应用  D.1 运行netstore所需的软件  D.2 netstore应用的目录结构  D.3 安装SAMPLEDB...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part4

     C.1 创建带有@hibernate标记的Java源文件  C.2 建立项目的目录结构  C.3 运行XDoclet工具 附录D 发布和运行netstore应用  D.1 运行netstore所需的软件  D.2 netstore应用的目录结构  D.3 安装SAMPLEDB...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part3

     C.1 创建带有@hibernate标记的Java源文件  C.2 建立项目的目录结构  C.3 运行XDoclet工具 附录D 发布和运行netstore应用  D.1 运行netstore所需的软件  D.2 netstore应用的目录结构  D.3 安装SAMPLEDB...

    Hibernate实战(第2版 中文高清版)

    第一部分 从Hibernate和EJB 3.0开始  第1章 理解对象/关系持久化   1.1 什么是持久化   1.1.1 关系数据库   1.1.2 理解SQL   1.1.3 在Java中使用SQL   1.1.4 面向对象应用程序中的持久化   1.2 范式不...

Global site tag (gtag.js) - Google Analytics