`

hibernate查询语言hql

阅读更多

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

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

  1. //返回结果集属性列表,元素类型和实体类中相应的属性类型一致   
  2. List students = session.createQuery("select name from Student" ).list();  
  3.   
  4. //查询多个属性,其集合元素是对象数组   
  5. //数组元素的类型和对应的属性在实体类中的类型一致   
  6. //数组的长度取决与select中属性的个数   
  7. List students = session.createQuery("select id, name from Student" ).list();  
  8.       
  9. //如果认为返回数组不够对象化,可以采用hql动态实例化Student对象   
  10. //此时list中为Student对象集合   
  11. List students = session.createQuery("select new Student(id, name) from Student" ).list();  
  12.   
  13. //可以使用别名   
  14. List students = session.createQuery("select s.id, s.name from Student s" ).list();  
  15.   
  16.   
  17.             //可以使用as命名别名   
  18.             List students = session.createQuery("select s.id, s.name from Student as s" ).list();  

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

 

  1. //返回Student对象的集合   
  2. //可以忽略select   
  3. List students = session.createQuery("from Student" ).list();  
  4.   
  5. //返回Student对象的集合   
  6. //可以忽略select,表可以使用别名   
  7. List students = session.createQuery("from Student s" ).list();  
  8.   
  9. //返回Student对象的集合   
  10. //可以忽略select,表可以使用as命名别名   
  11. List students = session.createQuery("from Student as s" ).list();  
  12.           
  13. //返回Student对象的集合   
  14. //使用select查询实体对象,必须采用别名   
  15. List students = session.createQuery("select s from Student as s" ).list();  
  16.   
  17. //不支持select * from .....这样的查询语句   
  18. List students = session.createQuery("select * from Student" ).list();  
  19.   
  20. /**  
  21.  * 采用list查询发出一条查询语句,取得Student对象数据、  
  22.  *   
  23.  * Hibernate: select student0_.id as id1_, student0_.name as name1_,   
  24.  * student0_.createTime as createTime1_, student0_.classesid as classesid1_   
  25.  * from t_student student0_  
  26.  *   
  27.  */   
  28. List students = session.createQuery("from Student" ).list();  
  29.   
  30. /**  
  31.  * 出现N+1问题  
  32.  *   
  33.  * 1:发出查询id列表的sql  
  34.  *   Hibernate: select student0_.id as col_0_0_ from t_student student0_  
  35.  *   
  36.  * N:在依次发出根据id查询Student对象的sql  
  37.  * Hibernate: select student0_.id as id1_0_, student0_.name as name1_0_,   
  38.  * student0_.createTime as createTime1_0_, student0_.classesid as classesid1_0_   
  39.  * from t_student student0_ where student0_.id=?  
  40.  *    
  41.  */   
  42. Iterator iter = session.createQuery("from Student" ).iterate();  
  43.   
  44. /**  
  45.  * 不会出现N+1问题  
  46.  *   
  47.  * 因为list操作已经将Student对象放到了一级缓存中,所以再次使用iterate操作的时候  
  48.  * 它首先发出一条查询id列表的sql,在根据id到缓存中去数据,只有在缓存中找不到相应的  
  49.  * 数据时,才会发出sql到数据库中查询  
  50.  *   
  51. */   
  52.   
  53. /**  
  54.  * 再次发出查询sql  
  55.  *   
  56.  * 在默认情况下list每次都会向数据库发出查询对象的sql,除非配置查询缓存,所以下面的list操作  
  57.  * 虽然在一级缓存中已经有了对象数据,但list默认情况下不会利用缓存,而再次发出sql  
  58.  *   
  59.  * 默认情况下,list会向缓存中放入数据,但不会利用数据  
  60.  *   
  61.  */   
  62. students = session.createQuery("from Student" ).list();  

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

 

  1. //可以拼字符串   
  2. List students = session.createQuery("select s.id, s.name from Student s where s.name like '%1%'" ).list();  
  3.   
  4. //Query query = session.createQuery("select s.id, s.name from Student s where s.name like ?");   
  5. //query.setParameter(0, "%1%");   
  6. //List students = query.list();   
  7.               
  8. //可以使用?方式传递参数

分享到:
评论

相关推荐

    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<User> 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