`
zengshaotao
  • 浏览: 787397 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Hibernate 对象查询

 
阅读更多

import java.util.Iterator;
import java.util.List;

import org.hibernate.Session;

import junit.framework.TestCase;

/**
 * 实体对象查询
 * @author Administrator
 *
 */
public class SimpleObjectQueryTest2 extends TestCase {

 public void testQuery1() {
  Session session = null;
  try {
   session = HibernateUtils.getSession();
   session.beginTransaction();
   
   /**
    * 采用list查询发出一条查询语句,取得Student对象数据、
    *
    * Hibernate: select student0_.id as id1_, student0_.name as name1_,
    * student0_.createTime as createTime1_, student0_.classesid as classesid1_
    * from t_student student0_
    *
    */
   List students = session.createQuery("from Student").list();
   for (Iterator iter=students.iterator(); iter.hasNext();) {
    Student student = (Student)iter.next();
    System.out.println(student.getName());
   }
   session.getTransaction().commit();
  }catch(Exception e) {
   e.printStackTrace();
   session.getTransaction().rollback();
  }finally {
   HibernateUtils.closeSession(session);
  }
 }
 
 public void testQuery2() {
  Session session = null;
  try {
   session = HibernateUtils.getSession();
   session.beginTransaction();
   
   /**
    * 出现N+1问题
    *
    * 1:发出查询id列表的sql
    *   Hibernate: select student0_.id as col_0_0_ from t_student student0_
    *
    * N:在依次发出根据id查询Student对象的sql
    * Hibernate: select student0_.id as id1_0_, student0_.name as name1_0_,
    * student0_.createTime as createTime1_0_, student0_.classesid as classesid1_0_
    * from t_student student0_ where student0_.id=?
    * 
    */
   Iterator iter = session.createQuery("from Student").iterate();
   while(iter.hasNext()) {
    Student student = (Student)iter.next();
    System.out.println(student.getName());
   }
   session.getTransaction().commit();
  }catch(Exception e) {
   e.printStackTrace();
   session.getTransaction().rollback();
  }finally {
   HibernateUtils.closeSession(session);
  }
 } 
 
 public void testQuery3() {
  Session session = null;
  try {
   session = HibernateUtils.getSession();
   session.beginTransaction();
   
   List students = session.createQuery("from Student").list();
   for (Iterator iter=students.iterator(); iter.hasNext();) {
    Student student = (Student)iter.next();
    System.out.println(student.getName());
   }
   System.out.println("---------------------------------------------");
   
   /**
    * 不会出现N+1问题
    *
    * 因为list操作已经将Student对象放到了一级缓存中,所以再次使用iterate操作的时候
    * 它首先发出一条查询id列表的sql,在根据id到缓存中去数据,只有在缓存中找不到相应的
    * 数据时,才会发出sql到数据库中查询
    *
    */
   Iterator iter = session.createQuery("from Student").iterate();
   while(iter.hasNext()) {
    Student student = (Student)iter.next();
    System.out.println(student.getName());
   }
   
   session.getTransaction().commit();
  }catch(Exception e) {
   e.printStackTrace();
   session.getTransaction().rollback();
  }finally {
   HibernateUtils.closeSession(session);
  }
 }
 
 public void testQuery4() {
  Session session = null;
  try {
   session = HibernateUtils.getSession();
   session.beginTransaction();
   
   List students = session.createQuery("from Student").list();
   for (Iterator iter=students.iterator(); iter.hasNext();) {
    Student student = (Student)iter.next();
    System.out.println(student.getName());
   }
   System.out.println("---------------------------------------------");
   
   /**
    * 再次发出查询sql
    *
    * 在默认情况下list每次都会向数据库发出查询对象的sql,除非配置查询缓存,所以下面的list操作
    * 虽然在一级缓存中已经有了对象数据,但list默认情况下不会利用缓存,而再次发出sql
    *
    * 默认情况下,list会向缓存中放入数据,但不会利用数据
    *
    */
   students = session.createQuery("from Student").list();
   for (Iterator iter=students.iterator(); iter.hasNext();) {
    Student student = (Student)iter.next();
    System.out.println(student.getName());
   }
   
   session.getTransaction().commit();
  }catch(Exception e) {
   e.printStackTrace();
   session.getTransaction().rollback();
  }finally {
   HibernateUtils.closeSession(session);
  }
 } 
}

分享到:
评论

相关推荐

    Hibernate对象的生命周期

    Hibernate对象的生命周期 Hibernate对象的生命周期 Hibernate对象的生命周期

    hibernate将本地SQL查询结果封装成对象

    本文将深入探讨如何使用Hibernate将本地SQL查询的结果封装成对象。 首先,本地SQL查询(Native SQL)是指直接在Hibernate中使用原生的SQL语句进行查询,而不是使用HQL(Hibernate Query Language)。这允许开发者...

    hibernate02:session对象、hql查询、在线查询也叫对象查询、离线查询

    在线查询(也称为对象查询)指的是在实际运行时执行的查询,它直接作用于数据库,返回的结果是数据库中的实时数据。这种查询方式通常适用于需要即时反馈的应用场景,例如,用户输入搜索条件后立即返回结果。 相反,...

    Hibernate连表查询 Hibernate连表查询

    如果查询结果包含多个字段,并且希望将这些字段封装成一个对象,则可以使用Hibernate的投影列表功能,或者手动创建一个新的类来存储查询结果。 ### 总结 本文主要介绍了Hibernate中的连表查询方法及其在实际开发中...

    Hibernate对象关系映射

    Hibernate对象关系映射一对多 很基础等文档

    Java 精通Hibernate对象持久化技术权威指南

    《Java精通Hibernate对象持久化技术权威指南》是一本深度探讨Java开发中如何高效地使用Hibernate进行对象持久化的专业书籍。本书旨在帮助Java开发者熟练掌握Hibernate框架,实现数据库操作的简化和自动化,提升软件...

    hibernate实现动态SQL查询

    在Java世界中,Hibernate是一个非常流行的ORM(对象关系映射)框架,它允许开发者将数据库操作与业务逻辑解耦,从而提高开发效率。本篇文章主要探讨如何利用Hibernate实现动态SQL查询,结合XML配置和FREEMARKER模板...

    hibernate将本地SQL查询结果封装成对象(最终).zip

    本教程将详细解释如何使用Hibernate将本地SQL查询的结果封装成对象,以便更好地理解和应用这项技术。 1. Hibernate ORM简介: Hibernate是一个开源的ORM框架,它为Java应用程序提供了数据持久化的解决方案。它通过...

    hibernate自定义查询

    Hibernate Query Language (HQL) 是Hibernate提供的面向对象的查询语言,类似于SQL,但它是针对Java对象的。HQL允许我们以类和属性的名字而不是表和列来编写查询,降低了与数据库的耦合度。例如,我们可以使用以下...

    hibernate-3.3.2工具包

    4. **Hibernate对象查询语言(HQL)**:HQL是Hibernate的SQL方言,允许开发者用面向对象的方式编写查询,增强了代码的可读性和可维护性。 5. **Criteria API**:提供了一种更强大的动态查询方式,开发者可以通过...

    Hibernate的MySql查询.rar

    HQL是Hibernate专有的查询语言,类似于SQL,但它是面向对象的。例如,我们可以使用以下HQL语句来查询所有用户: ```java Session session = HibernateUtil.getSessionFactory().openSession(); Query<User> query =...

    Hibernate 对象持久化

    **Hibernate对象持久化** 在Java开发中,数据库操作是不可或缺的一部分。Hibernate作为一种强大的ORM(对象关系映射)框架,极大地简化了Java应用与数据库之间的交互。它通过将Java类映射到数据库表,实现了对象...

    Hibernate 操纵持久化对象

    总结,Hibernate操纵持久化对象涉及多个方面,包括对象状态管理、事务处理、查询机制、缓存策略以及关系映射等。熟练掌握这些概念和操作,将极大地提高开发效率,并有助于构建高效、稳定的数据库应用程序。通过实践...

    精通Hibernate:Java对象持久化详解.zip

    4. **查询语言(HQL)**:介绍Hibernate查询语言,它是面向对象的查询语言,允许开发者以类和对象的方式编写查询,避免了直接使用SQL。 5. **Criteria查询和Criteria API**:提供了一种比HQL更灵活的查询方式,可以...

    hibernate的多态查询

    标题“hibernate的多态查询”指的是在Hibernate框架中,如何进行涉及不同子类的对象查询,这是ORM(对象关系映射)中的一个重要特性,旨在提高代码的灵活性和可扩展性。多态查询允许我们编写一次查询,而无需关心...

    hibernate将本地SQL查询结果封装成对象(最终)

    使用本地sql语句查询后,无需再使用Object对查询结果进行强制转换,而是直接将查询结果放到实体Bean里了。 PS: 其实只有一版,这里只所以叫最终版是因为该附件我上传了好几天传不上去,到最后报告说‘资源已经存在...

    Hibernate操作持久化对象

    Hibernate 操作持久化对象是Java开发中用于简化数据库交互的重要工具。它是一个开源的Java持久化框架,由Gavin King创建,并逐渐发展成为Java世界中主流的持久化解决方案。Hibernate的核心在于提供对象-关系映射(ORM...

    hibernate里面的 两种查询

    Criteria API 是Hibernate提供的一种面向对象的查询方式,它允许开发者通过构建对象来表示查询条件,而不是直接编写SQL语句。这种查询方式更加符合面向对象编程的思想,降低了SQL语句的硬编码,提高了代码的可读性...

Global site tag (gtag.js) - Google Analytics