`
zcz123
  • 浏览: 157712 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类

hibernate查询语言hql

阅读更多

在hql中关键字不区分大小写,但是属性和类名区分大小写

1、简单属性查询【重要】
 * 单一属性查询,返回结果集属性列表,元素类型和实体类中相应的属性类型一致
 * 多个属性查询,返回的集合元素是对象数组,数组元素的类型和对应的属性在实体类中的类型一致
   数组的长度取决与select中属性的个数
 * 如果认为返回数组不够对象化,可以采用hql动态实例化Student对象
 参见:SimplePropertyQueryTest.java (取主要代码)

单一属性查询
select name from Student
多个属性
select id,name from Student
使用实体
select new com.Student (id,name) from Student
使用别名
select s.id,s.name from Student s 
select s.id,s.name from Student as s 

 

2、实体对象查询【重要】
 * N + 1问题,在默认情况下,使用query.iterate查询,有可以能出现N+1问题
   所谓的N+1是在查询的时候发出了N+1条sql语句
   1: 首先发出一条查询对象id列表的sql
   N: 根据id列表到缓存中查询,如果缓存中不存在与之匹配的数据,那么会根据id发出相应的sql语句
 * list和iterate的区别?
  * list每次都会发出sql语句,list会向缓存中放入数据,而不利用缓存中的数据
  * iterate:在默认情况下iterate利用缓存数据,但如果缓存中不存在数据有可以能出现N+1问题
 参见:SimpleObjectQueryTest1.java/SimpleObjectQueryTest2.java
 

//SimpleObjectQueryTest1.java
各种hql语句查询
from Student
from Student s
from Student as s
select s from Student s
select s from Student as s
//SimpleObjectQueryTest2.java
区别list与iterator方法查询,出现hql语句次数
list查询没缓存,查询几次就出现几次
iterator查询没缓存会出现n+1次,多出来的一次是查询id列表,但是出现相同的数据查询会到缓存中去取,不会出现hql语句

 
3、条件查询【重要】 
 * 可以采用拼字符串的方式传递参数
 * 可以采用 ?来传递参数(索引从0开始)
 * 可以采用 :参数名 来传递参数
 * 如果传递多个参数,可以采用setParamterList方法
 * 在hql中可以使用数据库的函数,如:date_format
 参见:SimpleConditionQueryTest.java  
   

//?来传递参数(索引从0开始)
List students = session.createQuery("select s.id, s.name from Student s where s.name like ?")
.setParameter(0, "%1%").list();

//使用 :参数名称 的方式传递参数值
List students = session.createQuery("select s.id, s.name from Student s where s.name like :myname")
.setParameter("myname", "%1%").list();

//支持in,需要使用setParameterList进行参数传递
List students = session.createQuery("select s.id, s.name from Student s where s.id in(:myids)")
.setParameterList("myids", new Object[] { 1, 2, 3, 4, 5 })
.list();

 
4、hibernate也支持直接使用sql进行查询
 参见:SqlQueryTest.java

List students = session.createSQLQuery("select id,name from t_student ").list();

 

5、外置命名查询
 * 在映射文件中采用<query>标签来定义hql
 * 在程序中采用session.getNamedQuery()方法得到hql查询串
 参见:Student.hbm.xml、NameQueryTest.java
 

<class name="Student" table="t_Student">	
		<id name="id" type="integer">            
            <generator class="increment" />
        </id>
		<property name="name"/>
		<property name="createTime"/>	
		<many-to-one name="classes" column="classesid" />
		<filter name="filtertest" condition="id &lt; :myid" />		
	</class>	
	<query name="searchStudents">
		<![CDATA[
			SELECT s FROM Student s where s.id<?
		]]>
	</query>
	<filter-def name="filtertest">
		<filter-param name="myid" type="integer" />
	</filter-def>

 

List students = session.getNamedQuery("searchStudents").setParameter(0, 10).list();

 
6、查询过滤器 
 * 在映射文件中定义过滤器参数
 * 在类的映射中使用这些参数
 * 在程序中启用过滤器
 参见:Student.hbm.xml(同5)、FilterQueryTest.java
 

session.enableFilter("filtertest") .setParameter("myid", 10);	
List students = session.createQuery("from Student").list();

 
7、分页查询【重要】 
 * setFirstResult(),从0开始
 * setMaxResults,每页显示多少条数据
 参见:PageQueryTest.java
    

List students = session.createQuery("from Student").setFirstResult(1) //从第二条开始读
	.setMaxResults(20) //读了20条
	.list();

 
8、对象导航查询,在hql中采用 . 进行导航【重要】
 参见:ObjectNavQueryTest.java
 

//配置student与class的多对一配置
List students = session.createQuery("select s.name from Student s where s.classes.name like '%1%'").list();

 
9、连接查询【重要】
 * 内连
 * 外连接(左连接/右连接) 
 参见:JoinQueryTest.java
 

//内连接
List students = session.createQuery("select c.name, s.name from Student s inner join s.classes c").list();

//外连接
List students = session.createQuery("select c.name, s.name from Classes c left join c.student s").list();

 
10、统计查询【重要】
 参见:StatQueryTest.java
 

//统计出来的对象是整形的
Object obj = session.createQuery("select count(*) from Student").uniqueResult();
Integer result = (Integer)obj;

 
11、DML风格的操作(尽量少用,因为和缓存不同步)
 参见:DMLQueryTest.java

 

session.createQuery("update Student s set s.name=? where s.id < ?")
.setParameter(0, "李四")
.setParameter(1, 5)
.executeUpdate();

 

分享到:
评论

相关推荐

    Hibernate查询语言HQL

    Hibernate查询语言HQL

    Hibernate查询语言HQL.PPT

    Hibernate 查询语言 HQL Hibernate 查询语言 HQL 是一种面向对象的查询语言,用于检索对象。它提供了灵活多样的查询机制,包括导航对象图、通过标识符检索、使用 HQL 检索对象、使用 Hibernate 条件 API 和使用本地...

    hibernate查询语言--HQL

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

    HQL Hibernate查询语言

    HQL Hibernate 查询语言 HQL(Hibernate Query Language)是 Hibernate 中的一种强大的查询语言,它看起来很像 SQL,但是不要被语法结构上的相似所迷惑,HQL 是非常有意识的被设计为完全面向对象的查询,它可以理解...

    Hibernate查询语言(HQL)

    ### Hibernate 查询语言 (HQL) #### 一、简介 Hibernate 查询语言(HQL)是一种功能强大的查询语言,它与 SQL 在语法上有一定的相似性,但 HQL 被设计成面向对象的语言,能够理解诸如继承、多态和关联等概念。这种...

    Hibernate查询语言(HQL) 语法参考

    Hibernate 查询语言(HQL)语法参考 HQL(Hibernate Query Language)是 Hibernate 框架中的一种强大的查询语言,它类似于 SQL 语句,但是它是完全面向对象的查询语言,可以理解继承、多态和关联等概念。 大小写...

    hibernate 查询?Hibernate的HQL查询

    【描述】:在ORM框架Hibernate中,数据查询和检索是一个核心功能,它提供了多种查询方式,包括标准化对象查询(Criteria Query)、Hibernate查询语言(HQL)和原生SQL查询。其中,HQL作为官方推荐的查询方式,具有...

    Hibernate 课件_HQL

    - **定义**: HQL(Hibernate Query Language)是一种面向对象的查询语言,它的语法类似于SQL,但不同于直接操作数据库表,HQL操作的是持久化的Java对象。这意味着在编写查询时,可以使用Java对象模型中的类名和属性...

    hibernateHQL关联查询

    其中,HQL(Hibernate Query Language)作为Hibernate提供的查询语言之一,允许开发者以接近面向对象的方式编写查询语句。本文将重点介绍Hibernate中的关联查询,并深入探讨HQL关联查询的实现原理及应用场景。 ####...

    Hibernate hql查询语法总结

    其内置的HQL(Hibernate Query Language)是一种面向对象的查询语言,它允许开发者以类和对象的方式进行数据查询。本文将对Hibernate HQL查询语法进行总结,涵盖基础查询、属性查询、实例化查询以及查询链接等多个...

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

    在数据查询方面,Hibernate提供了多种查询方式,其中HQL(Hibernate Query Language)是一种基于SQL的领域查询语言,它允许开发者以面向对象的方式编写查询语句,而无需直接处理复杂的SQL语句。本文将深入探讨...

    Hibernate实例开发 HQL 与 QBC 查询

    首先,HQL是Hibernate专门设计的一种面向对象的查询语言,它的语法类似于SQL,但更注重对象而非表。例如,如果我们有一个`User`实体,我们可以使用HQL来获取所有用户: ```java Session session = sessionFactory....

    Hibernate-HQL.rar_HQL_hibernate hql

    本篇文档将深入探讨Hibernate中的HQL(Hibernate Query Language),一种面向对象的查询语言,它提供了与SQL类似的语法,但更贴近于面向对象的思维模式,使得开发者可以更加便捷地进行数据查询。 一、HQL简介 HQL是...

    精通hibernate HQL语言

    HQL,全称Hibernate Query Language,是Hibernate框架提供的一种面向对象的查询语言,它的语法结构与SQL相似,但主要针对对象和实体进行操作,而不是直接操作数据库表。HQL是Hibernate官方推荐的检索数据的主要方式...

    Hibernate注解方式、HQL查询

    1. **基本查询**:HQL是Hibernate提供的面向对象的查询语言,类似于SQL。例如,获取所有用户: ```java String hql = "from User"; List&lt;User&gt; users = session.createQuery(hql).list(); ``` 2. **条件查询**:HQL...

    hibernate in action 中文版书籍

    4. **查询语言HQL和 Criteria API**:介绍Hibernate查询语言HQL,它是面向对象的查询方式,与SQL相对应,同时讲解Criteria API,提供更动态、类型安全的查询方式。 5. ** Criteria和DetachedCriteria**:详细阐述...

Global site tag (gtag.js) - Google Analytics