`
yangxianjiangg
  • 浏览: 61247 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Hibernate查询返存

阅读更多

查询缓存是针对普通属性结果集的缓存,对实体对象的结果集只缓存id

查询缓存的生命周期,当前关联的表发生修改,那么查询缓存生命周期结束

查询缓存的配置和使用:

    * 在hibernate.cfg.xml文件中启用查询缓存,如:

    <property name="hibernate.cache.use_query_cache">true</property>

    * 在程序中必须手动启用查询缓存,如:

    query.setCacheable(true);

下面举例说明一下查询缓存的使用:

/**

     * 开启查询缓存,关闭二级缓存

     * 开启一个session,分别调用query.list

     */

    public void testCache1() {

        Session session = null;

        try {

            session = HibernateUtils.getSession();

            session.beginTransaction();

            

            Query query = session.createQuery("select s.name from Student s");

            //启用查询查询缓存

            query.setCacheable(true);

            

            List names = query.list(); 

            for (Iterator iter=names.iterator();iter.hasNext(); ) {

                String name = (String)iter.next();

                System.out.println(name);

            }

            

            System.out.println("-------------------------------------");

            query = session.createQuery("select s.name from Student s");

            //启用查询查询缓存

            query.setCacheable(true);

            

            //没有发出查询sql,因为启用了查询缓存

            names = query.list(); 

            for (Iterator iter=names.iterator();iter.hasNext(); ) {

                String name = (String)iter.next();

                System.out.println(name);

            }

            session.getTransaction().commit();

        }catch(Exception e) {

            e.printStackTrace();

            session.getTransaction().rollback();

        }finally {

            HibernateUtils.closeSession(session);

        }

    }    

    

    /**

     * 开启查询缓存,关闭二级缓存

     * 开启两个session,分别调用query.list

     */

    public void testCache2() {

        Session session = null;

        try {

            session = HibernateUtils.getSession();

            session.beginTransaction();

            

            Query query = session.createQuery("select s.name from Student s");

            //启用查询查询缓存

            query.setCacheable(true);

            

            List names = query.list(); 

            for (Iterator iter=names.iterator();iter.hasNext(); ) {

                String name = (String)iter.next();

                System.out.println(name);

            }

            session.getTransaction().commit();

        }catch(Exception e) {

            e.printStackTrace();

            session.getTransaction().rollback();

        }finally {

            HibernateUtils.closeSession(session);

        }

        

        System.out.println("-------------------------------------");

        

        try {

            session = HibernateUtils.getSession();

            session.beginTransaction();

            

            Query query = session.createQuery("select s.name from Student s");

            //启用查询查询缓存

            query.setCacheable(true);

            

            //不会发出查询sql,因为查询缓存的生命周期和session无关

            List names = query.list(); 

            for (Iterator iter=names.iterator();iter.hasNext(); ) {

                String name = (String)iter.next();

                System.out.println(name);

            }

            session.getTransaction().commit();

        }catch(Exception e) {

            e.printStackTrace();

            session.getTransaction().rollback();

        }finally {

            HibernateUtils.closeSession(session);

        }

    }        

/**

     * 开启查询缓存,关闭二级缓存

     * 开启两个session,分别调用query.iterate

     */

    public void testCache3() {

        Session session = null;

        try {

            session = HibernateUtils.getSession();

            session.beginTransaction();

            

            Query query = session.createQuery("select s.name from Student s");

            //启用查询查询缓存

            query.setCacheable(true);

             

            for (Iterator iter=query.iterate();iter.hasNext(); ) {

                String name = (String)iter.next();

                System.out.println(name);

            }

            session.getTransaction().commit();

        }catch(Exception e) {

            e.printStackTrace();

            session.getTransaction().rollback();

        }finally {

            HibernateUtils.closeSession(session);

        }

        

        System.out.println("-------------------------------------");

        

        try {

            session = HibernateUtils.getSession();

            session.beginTransaction();

            

            Query query = session.createQuery("select s.name from Student s");

            //启用查询查询缓存

            query.setCacheable(true);

             

            //查询缓存只对query.list()起作用,query.iterate不起作用,也就是query.iterate不使用

            //查询缓存

            for (Iterator iter=query.iterate();iter.hasNext(); ) {

                String name = (String)iter.next();

                System.out.println(name);

            }

            session.getTransaction().commit();

        }catch(Exception e) {

            e.printStackTrace();

            session.getTransaction().rollback();

        }finally {

            HibernateUtils.closeSession(session);

        }

    }
 

 

分享到:
评论

相关推荐

    Hibernate连表查询 Hibernate连表查询

    根据提供的文件信息,我们可以深入探讨Hibernate中的连表查询方法及其应用。下面将详细介绍与标题、描述及部分代码相关的几个核心知识点: ### Hibernate 连表查询基础 Hibernate 是一个开源的对象关系映射(ORM)...

    通用的hibernate查询

    【hibernate查询详解】 Hibernate,作为一款强大的Java对象关系映射(ORM)框架,极大地简化了数据库操作。它允许开发者使用面向对象的方式来处理数据库,从而避免了传统的JDBC编码方式带来的复杂性。本篇文章将...

    struts+hibernate查询所有记录

    ### Struts+Hibernate查询所有记录 #### 一、概述 在Java Web开发中,Struts与Hibernate是非常流行的框架组合,用于构建复杂的企业级应用。本文将详细介绍如何利用Struts和Hibernate来实现对Oracle数据库中所有...

    Hibernate_query查询数据表中的一个字段.

    Hibernate提供了一种灵活的查询语言——HQL(Hibernate Query Language),以及 Criteria 查询和 Criteria API,它们都可以用来获取数据表中的特定字段。 二、Hibernate配置 在使用Hibernate进行查询前,首先需要...

    hibernate多表联合查询

    ### Hibernate多表联合查询详解 #### 一、引言 在实际项目开发中,我们经常需要处理复杂的数据库查询,特别是涉及到多个表之间的关联查询。Hibernate作为一款流行的Java持久层框架,提供了一种非常便捷的方式来处理...

    Hibernate查询练习小例子

    利用MYSQL数据库提供的样例数据库world建立的查询小例子。已经建立好了数据库对应的...本项目主要是为了练习使用Hibernate查询数据库。如果有什么问题可以发站内信或者邮件asddf14@hotmail.com。我会尽量解答一下~~~

    Hibernate分页查询小结

    Hibernate分页查询小结

    Hibernate查询语言HQL.PPT

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

    hibernate实现动态SQL查询

    本篇文章主要探讨如何利用Hibernate实现动态SQL查询,结合XML配置和FREEMARKER模板引擎来生成执行的SQL语句。 一、Hibernate简介 Hibernate作为一款强大的持久层框架,它简化了Java应用程序与数据库之间的交互。...

    Serlvet+Hibernate 进销存系统 适合初学者,代码完整

    【Servlet+Hibernate 进销存系统】是一种基于Java技术的Web应用程序,主要针对初学者设计,提供了完整的源代码,方便学习和实践。该系统利用Servlet作为服务器端的控制层,Hibernate作为持久化框架来处理数据库操作...

    hibernate查询代码

    在本篇文章中,我们将深入探讨Hibernate的查询机制,以及如何通过`hibernate.cfg.xml`配置文件来设置和管理数据库连接。 首先,让我们来看看Hibernate的核心配置文件`hibernate.cfg.xml`。这个文件是Hibernate与...

    hibernate 模糊查询 分页

    本篇文章将深入探讨如何使用Hibernate实现模糊查询和分页功能,这对于任何需要处理大量数据的应用程序来说都是至关重要的技能。 首先,让我们了解Hibernate的核心概念。Hibernate是一个开源的JPA(Java Persistence...

    hibernate里面的 两种查询

    在Java的持久化框架Hibernate中,查询是连接应用程序与数据库的关键环节。Hibernate提供了两种主要的查询方式:离线查询(Criteria API)和HQL(Hibernate Query Language)语句查询。这两种查询方法各有特点,适用...

    Hibernate的MySql查询.rar

    本文将深入探讨在使用Hibernate进行MySQL查询时的一些关键知识点,以帮助开发者更好地理解和应用这些技术。 首先,我们需要理解Hibernate的核心概念。Hibernate通过提供一个中间层,将Java对象与数据库表进行映射,...

    hibernate实现递归查询

    本文将深入探讨如何使用Hibernate实现递归查询,以解决在数据层次结构中涉及父节点与子节点关系时的问题。递归查询通常用于处理树形结构的数据,例如组织结构、菜单系统或者文件目录等。 首先,我们需要了解递归的...

    Hibernate分页查询原理解读

    ### Hibernate 分页查询原理详解 #### 一、引言 在大数据量处理场景下,分页查询是提高数据检索效率的重要手段之一。Hibernate作为Java领域内最常用的持久层框架之一,其内置的分页功能非常实用且高效。本文将深入...

    Hibernate查询映射试验

    本实践项目“Hibernate查询映射试验”旨在通过一系列示例帮助开发者掌握Hibernate中的查询映射技术,包括HQL(Hibernate Query Language)和Criteria API。 首先,Hibernate的核心是对象关系映射(ORM),它允许...

    Ext+Dwr+Struts+Hibernate_进销存管理系统数据库完整

    在进销存管理系统的前端展示层,Ext可能被用来构建直观易用的库存查询、订单处理和报表生成等功能。 Direct Web Remoting (DWR) 是一种允许JavaScript与服务器端Java代码进行实时交互的技术。通过DWR,前端可以调用...

Global site tag (gtag.js) - Google Analytics