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
-
-
- Iteratoriter=session.createQuery("fromStudent").iterate();
-
while(iter.hasNext()){
- Studentstudent=(Student)iter.next();
-
System.out.println(student.getName());
- }
- ==================================================================
-
Liststudents=session.createQuery("fromStudent").list();
-
for(Iteratoriter=students.iterator();iter.hasNext();){
- Studentstudent=(Student)iter.next();
-
System.out.println(student.getName());
- }
-
System.out.println("---------------------------------------------");
-
-
- Iteratoriter=session.createQuery("fromStudent").iterate();
-
while(iter.hasNext()){
- Studentstudent=(Student)iter.next();
-
System.out.println(student.getName());
- }
- ====================================================================
-
Liststudents=session.createQuery("fromStudent").list();
-
for(Iteratoriter=students.iterator();iter.hasNext();){
- Studentstudent=(Student)iter.next();
-
System.out.println(student.getName());
- }
-
System.out.println("---------------------------------------------");
-
-
- students=session.createQuery("fromStudent").list();
-
for(Iteratoriter=students.iterator();iter.hasNext();){
- Studentstudent=(Student)iter.next();
-
System.out.println(student.getName());
- }
分享到:
相关推荐
### HQL语法总结:实体查询详解 #### 一、实体查询概述 HQL(Hibernate Query Language)是一种面向对象的查询语言,它允许开发者以一种类似于SQL但更接近于面向对象的方式来编写查询。本文将详细介绍HQL中的实体...
在实际开发中,HQL关联查询的应用场景非常广泛,特别是在需要跨多个实体进行数据检索的情况下。例如,在电子商务系统中,我们需要获取用户信息及其相关的订单信息时,就可以利用HQL关联查询来简化这一过程。此外,当...
HQL(Hibernate Query Language)是一种面向对象的查询语言,它提供了与SQL类似的功能,但更贴近于面向对象编程的思维方式。HQL允许开发人员以一种更自然的方式查询数据库,同时保持了Java对象模型的一致性。 #### ...
HQL是一种面向对象的查询语言,它的语法结构与SQL类似,但更关注于对象和实体,而不是数据库表和列。HQL允许开发者直接操作Java对象,避免了直接编写SQL语句的麻烦,并且支持跨数据库的移植性。 二、HQL模糊查询...
`Example`是另一种用于查询的方式,主要用于匹配实体对象的某些属性。 ```java Session session = HibernateUtil.getSession(); List<User> users = session.createCriteria(User.class) .add(Example.create(user...
HQL与SQL语法类似,但它理解Java实体和属性,因此HQL查询的对象是Java类而不是数据库中的表。 首先,HQL的基本查询语句包括从特定实体类中查询记录。例如,查询一个名为User的实体类的所有记录,可以使用以下语句:...
- **DetachedCriteria** 是 Hibernate 提供的一个用于构建查询的 API,可以创建灵活且可重用的查询对象。 - **Restrictions.eq()** 用于添加等于约束。 - **Projections.projectionList()** 和 **Projections.max()*...
FROM子句指定要查询的对象,可以是一个实体类,也可以是多对一、一对多、多对多关联的类。例如: ```sql SELECT c FROM Course c JOIN c.students AS s WHERE s.name = '张三' ``` 此查询将返回所有张三选修的课程...
在Spring框架与Hibernate技术结合使用时,HQL(Hibernate Query Language)作为对象查询语言被广泛应用于数据查询操作之中。本文将详细解析Spring框架中常用的HQL查询方法及其应用场景。 #### 一、find(String ...
HQL是一种面向对象的查询语言,用于在Hibernate框架中执行数据检索任务。它允许开发人员以一种接近Java语言的方式进行数据库操作,从而简化了数据访问层的复杂度。 ### 1. from子句 `from`子句是HQL语句的基础,...
HQL是Hibernate提供的面向对象的查询语言,类似于SQL,但它是针对对象模型而非关系数据库设计的。HQL允许开发者以类和属性的名称进行查询,而不是表和列名,这使得代码更具可读性和可维护性。例如,你可以通过HQL...
首先,HQL是Hibernate专门设计的一种面向对象的查询语言,它的语法类似于SQL,但更注重对象而非表。例如,如果我们有一个`User`实体,我们可以使用HQL来获取所有用户: ```java Session session = sessionFactory....
HQL是Hibernate框架提供的一种面向对象的查询语言,它允许开发人员以面向对象的方式编写数据库查询,而无需直接处理SQL语句,从而简化了数据访问逻辑。 ### 1. FROM子句 FROM子句用于指定查询的对象来源。例如,...
HQL(Hibernate Query Language)是Hibernate框架提供的面向对象的查询语言,它允许开发者用类名和属性名称来执行SQL查询,使得代码更加易读且与数据库无关。本文将深入分析HQL在处理多对多关系时的查询语句及其应用...
* HQL 语句可以用于查询继承关系中的实体对象,例如:from Employee,可以检索出所有 Employee 类型实体对象所对应的数据,包括它的子类 HourlyEmployee、SalariedEmployee 对应的数据。 例子: * from User user ...
在数据查询方面,Hibernate提供了多种查询方式,其中HQL(Hibernate Query Language)是一种基于SQL的领域查询语言,它允许开发者以面向对象的方式编写查询语句,而无需直接处理复杂的SQL语句。本文将深入探讨...
HQL(Hibernate Query Language)是Hibernate框架中用于操作对象关系映射(ORM)的查询语言,它与SQL类似,但专为面向对象编程设计。HQL允许开发者以类和对象的方式编写查询,而不是直接处理数据库表格。 ### 1. ...