`

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

分享到:
评论

相关推荐

    Hibernate HQL详解.docx

    Hibernate HQL,全称为Hibernate Query Language,是Hibernate框架中用于操作数据库的一种面向对象的查询语言。它允许开发者用面向对象的方式来编写查询语句,极大地提高了开发效率和代码的可读性。以下是对HQL的...

    HQL详解

    **HQL详解** Hibernate Query Language(HQL)是Hibernate框架中的对象关系映射查询语言,它允许开发者以面向对象的方式书写查询,而无需关心底层数据库的SQL语法。HQL是SQL的一个面向对象的版本,提供了更为简洁且...

    Hibernate hql查询语法总结

    《Hibernate HQL查询语法详解》 Hibernate,作为Java领域中广泛应用的对象关系映射(ORM)框架,极大地简化了数据库操作。其内置的HQL(Hibernate Query Language)是一种面向对象的查询语言,它允许开发者以类和...

    Hibernate数据检索(HQL)笔记

    ### Hibernate数据检索(HQL)知识点详解 #### 一、简介 Hibernate 是一款开源的对象关系映射(ORM)框架,它允许开发人员将 Java 对象映射到数据库表中的记录,从而极大地简化了数据访问层的开发工作。本文档基于...

    hibernateHQL关联查询

    ### Hibernate HQL 关联查询详解 #### 一、引言 在进行数据库操作时,关联查询是必不可少的一部分,尤其在处理复杂的数据结构时更是如此。Hibernate作为一种流行的Java持久层框架,提供了强大的对象关系映射(ORM...

    Hibernate的详解

    **Hibernate详解** Hibernate是一款强大的Java持久化框架,它简化了数据库与Java对象之间的交互,使得开发者无需关注SQL的编写,可以更加专注于业务逻辑。本文将深入探讨Hibernate的核心概念、主要功能以及如何在...

    HibernateHql综合测试小程序

    总的来说,"HibernateHql综合测试小程序"是一个实用的学习和调试工具,它可以帮助开发者熟悉并精通HQL的语法和用法。通过实际操作和测试,开发者可以更深刻地理解Hibernate的查询机制,提升开发效率,为项目开发打下...

    Hibernate教程(数据查询)HQL,PDF格式

    ### Hibernate教程:数据查询与HQL详解 #### 引言 Hibernate是一款强大的对象关系映射(ORM)框架,它能够将Java对象与数据库表进行映射,极大地简化了数据库操作的复杂度。在数据查询方面,Hibernate提供了多种...

    Hibernate学习笔记和资料

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

    Hql详解[文].pdf

    - Hibernate提供`setFirstResult(int firstResult)`和`setMaxResults(int maxResults)`方法进行分页,如`Query query = session.createQuery(hql).setFirstResult(1).setMaxResults(2);` 5. **聚集函数** - Hql...

    hibernate所用到HQL经典语句大全

    ### HQL经典语句大全详解 #### 一、HQL简介及基本语法 HQL(Hibernate Query Language)是一种面向对象的查询语言,它允许开发者使用类及其属性来编写查询语句,而不是传统的SQL语句。这使得开发人员可以更加专注...

    Hibernate_HQL大全

    ### Hibernate_HQL大全详解 #### 一、HQL概述 HQL,即Hibernate Query Language,是一种强大且面向对象的查询语言,由Hibernate框架提供。尽管HQL的语法结构与SQL相似,但其设计理念完全不同,HQL是专门为面向对象...

    hibernate包详解+hibernatePPT

    **hibernate包详解** Hibernate 是一款开源的对象关系映射(ORM)框架,它为Java开发者提供了一种在关系数据库和面向对象编程之间架起桥梁的解决方案。通过使用Hibernate,开发人员可以避免直接编写SQL语句,而是用...

    Hibernate HQL.txt

    根据提供的文件信息,我们可以深入探讨Hibernate HQL(Hibernate Query Language)的相关知识点,特别是关于其查询功能、连接操作、条件过滤以及聚合函数的应用等。 ### Hibernate HQL简介 Hibernate HQL是一种...

    Hibernate连接Mycat例子详解

    "Hibernate 连接Mycat例子详解_正能量_20150507.docx"文档很可能包含了整个示例的详细步骤,包括项目构建、Mycat配置、Hibernate配置、实体类创建、DAO层接口及实现、以及如何运行和测试应用。这份文档会指导开发者...

    Hibernate连表查询 Hibernate连表查询

    这里使用了HQL(Hibernate Query Language)来执行查询。例如,在`getProductsMenuSub`方法中,通过以下HQL语句实现了连表查询: ```java String queryString = "select a.productsName from TopProducts as a, ...

    hibernate查询语言--HQL

    以上就是关于Hibernate查询语言HQL的详解,包括了从简单属性查询到实体对象查询,再到条件查询、原生SQL查询和外置命名查询的使用。通过学习和实践,开发者可以更加熟练地运用Hibernate进行数据库操作。

    hibernate多表查询详解

    **hibernate多表查询详解** 在Java的持久化框架中,Hibernate是一个广泛使用的ORM(对象关系映射)工具,它允许开发者用面向对象的方式来处理数据库操作。在实际的业务场景中,数据往往不是孤立存在的,而是存在于...

Global site tag (gtag.js) - Google Analytics