• Hibernate中的二级缓存 EHCache


    hibernate.cfg.xml

    代码:

    <?xml version='1.0' encoding='UTF-8'?>
    <!DOCTYPE hibernate-configuration PUBLIC
              "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
              "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

    <!-- Generated by MyEclipse Hibernate Tools.                   -->
    <hibernate-configuration>

    <session-factory>
     <property name="dialect">
      org.hibernate.dialect.MySQLDialect
     </property>
     <property name="connection.url">
      jdbc:mysql://localhost:3307/users
     </property>
     <property name="connection.username">root</property>
     <property name="connection.password">root</property>
     <property name="connection.driver_class">
      com.mysql.jdbc.Driver
     </property>
     <property name="myeclipse.connection.profile">mysqlusers</property>
     <property name="show_sql">true</property>
     <property name="format_sql">true</property>
     <property name="current_session_context_class">thread</property>
     <property name="cache.provider_class">
      org.hibernate.cache.EhCacheProvider
     </property>
     <mapping resource="com/b510/examplex/Guestbook.hbm.xml" />

    </session-factory>

    </hibernate-configuration>

    src目录下面编写ehcache.xml

    代码;

    <?xml version="1.0" encoding="UTF-8"?>
    <ehcache>
                 <!-- 说明:maxElementsInMemory  设置 保存在内存中的缓存对象的最大数量
                   etemal  设置缓存中对象 是否永远不过期,如果值为true,超过设置被忽略,缓存对象永远不过期
                   timeToIdleSeconds   设置缓存中对象在他过期之前的最大空闲时间,单位为秒
                   timeToLiveSeconds   设置缓存中对象在他过期之前的最大生存时间 ,单位为秒
                   overflowToDisk      设置内存中的缓存对象达到maxElementsInMemory限制时,是否将缓存对象保存到硬盘中      
                 -->
     <diskStore path="java.io.tmpdir"/>
     <defaultCache maxElementsInMemory="10000" eternal="false"
     timeToIdleSeconds="120" timeToLiveSeconds="120"
     overflowToDisk="true"/>
     <cache name="com.b510.examplex.Guestbook" maxElementsInMemory="1000"
     eternal="true" timeToIdleSeconds="300" timeToLiveSeconds="600"
     overflowToDisk="true"/> 
    </ehcache>

    Guestbook.hbm.xml

    代码:

    <?xml version="1.0" encoding="utf-8"?>
    <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    <hibernate-mapping>
     <class name="com.b510.examplex.Guestbook" table="guestbook"
      catalog="users" optimistic-lock="version">
      <!-- EHCache二级缓存的策略:
          只读缓存          (read-only)
          读/写缓存          (read-write)
          不严格的读/写缓存       (nonstrict-read-write)
          事务缓存           (transactional)         EHCache不支持事务缓存  
       -->
      <!-- 应用EHCache二级缓存的策略 -->
      <cache usage="read-only"/>
      <id name="id" type="java.lang.Integer">
       <column name="id" />
       <generator class="increment" />
      </id>
      <version name="version" column="version" access="field"></version>
      <property name="name" type="java.lang.String">
       <column name="name" length="200" />
      </property>
      <property name="email" type="java.lang.String">
       <column name="email" length="50" />
      </property>
      <property name="phone" type="java.lang.String">
       <column name="phone" length="20" />
      </property>
      <property name="title" type="java.lang.String">
       <column name="title" length="200" />
      </property>
      <property name="content" type="java.lang.String">
       <column name="content" length="1000" />
      </property>
      <property name="createdTime" type="java.util.Date">
       <column name="created_time" length="10" />
      </property>
     </class>
    </hibernate-mapping>

    测试代码:

    HIbernateTest.java

    代码:

    /**
     *
     */
    package com.b510.examplex;

    import java.util.Iterator;

    import org.hibernate.Query;
    import org.hibernate.Session;


    /**
     *
     * @author XHW
     *
     * @date 2011-7-15
     *
     */
    public class HibernateTest {

     /**
      * @param args
      */
     public static void main(String[] args) {
      new HibernateTest().getGuestbooks();
     }

     public void getGuestbooks(){
      Session session=HibernateSessionFactoryUtil.getSessionFactory().openSession();
      session.beginTransaction();
      Query query=session.createQuery("from Guestbook");
      Iterator it=query.iterate();
      while(it.hasNext()){
       Guestbook gb=(Guestbook)it.next();
       System.out.println("name: "+gb.getName()+"  Id:"+gb.getId());
      }
      query=session.createQuery("from Guestbook where id=2");
      Guestbook gb=(Guestbook)query.uniqueResult();
      System.out.println("name: "+gb.getName()+"  Id:"+gb.getId());
      session.getTransaction().commit();
     } 
    }

    运行效果:

    log4j:WARN No appenders could be found for logger (org.hibernate.cfg.Environment).
    log4j:WARN Please initialize the log4j system properly.
    Hibernate:
        select
            guestbook0_.id as col_0_0_
        from
            users.guestbook guestbook0_
    Hibernate:
        select
            guestbook0_.id as id0_0_,
            guestbook0_.version as version0_0_,
            guestbook0_.name as name0_0_,
            guestbook0_.email as email0_0_,
            guestbook0_.phone as phone0_0_,
            guestbook0_.title as title0_0_,
            guestbook0_.content as content0_0_,
            guestbook0_.created_time as created8_0_0_
        from
            users.guestbook guestbook0_
        where
            guestbook0_.id=?
    name: liuwei  Id:1
    Hibernate:
        select
            guestbook0_.id as id0_0_,
            guestbook0_.version as version0_0_,
            guestbook0_.name as name0_0_,
            guestbook0_.email as email0_0_,
            guestbook0_.phone as phone0_0_,
            guestbook0_.title as title0_0_,
            guestbook0_.content as content0_0_,
            guestbook0_.created_time as created8_0_0_
        from
            users.guestbook guestbook0_
        where
            guestbook0_.id=?
    name: Hongtenzone@foxmail.com  Id:2
    Hibernate:
        select
            guestbook0_.id as id0_0_,
            guestbook0_.version as version0_0_,
            guestbook0_.name as name0_0_,
            guestbook0_.email as email0_0_,
            guestbook0_.phone as phone0_0_,
            guestbook0_.title as title0_0_,
            guestbook0_.content as content0_0_,
            guestbook0_.created_time as created8_0_0_
        from
            users.guestbook guestbook0_
        where
            guestbook0_.id=?
    name: Hongten  Id:3
    Hibernate:
        select
            guestbook0_.id as id0_0_,
            guestbook0_.version as version0_0_,
            guestbook0_.name as name0_0_,
            guestbook0_.email as email0_0_,
            guestbook0_.phone as phone0_0_,
            guestbook0_.title as title0_0_,
            guestbook0_.content as content0_0_,
            guestbook0_.created_time as created8_0_0_
        from
            users.guestbook guestbook0_
        where
            guestbook0_.id=?
    name: HOngten  Id:4
    Hibernate:
        select
            guestbook0_.id as id0_0_,
            guestbook0_.version as version0_0_,
            guestbook0_.name as name0_0_,
            guestbook0_.email as email0_0_,
            guestbook0_.phone as phone0_0_,
            guestbook0_.title as title0_0_,
            guestbook0_.content as content0_0_,
            guestbook0_.created_time as created8_0_0_
        from
            users.guestbook guestbook0_
        where
            guestbook0_.id=?
    name: HOngten  Id:5
    Hibernate:
        select
            guestbook0_.id as id0_0_,
            guestbook0_.version as version0_0_,
            guestbook0_.name as name0_0_,
            guestbook0_.email as email0_0_,
            guestbook0_.phone as phone0_0_,
            guestbook0_.title as title0_0_,
            guestbook0_.content as content0_0_,
            guestbook0_.created_time as created8_0_0_
        from
            users.guestbook guestbook0_
        where
            guestbook0_.id=?
    name: HOngten  Id:6
    Hibernate:
        select
            guestbook0_.id as id0_0_,
            guestbook0_.version as version0_0_,
            guestbook0_.name as name0_0_,
            guestbook0_.email as email0_0_,
            guestbook0_.phone as phone0_0_,
            guestbook0_.title as title0_0_,
            guestbook0_.content as content0_0_,
            guestbook0_.created_time as created8_0_0_
        from
            users.guestbook guestbook0_
        where
            guestbook0_.id=?
    name: HOngten  Id:7
    Hibernate:
        select
            guestbook0_.id as id0_,
            guestbook0_.version as version0_,
            guestbook0_.name as name0_,
            guestbook0_.email as email0_,
            guestbook0_.phone as phone0_,
            guestbook0_.title as title0_,
            guestbook0_.content as content0_,
            guestbook0_.created_time as created8_0_
        from
            users.guestbook guestbook0_
        where
            guestbook0_.id=2
    name: Hongtenzone@foxmail.com  Id:2

    测试代码二:

    HibernateTest.java

    代码:

    /**
     *
     */
    package com.b510.examplex;

    import java.util.Iterator;

    import org.hibernate.Query;
    import org.hibernate.Session;


    /**
     *
     * @author XHW
     *
     * @date 2011-7-15
     *
     */
    public class HibernateTest {

     /**
      * @param args
      */
     public static void main(String[] args) {
      new HibernateTest().getGuestbooks();
     }

     public void getGuestbooks(){
      Session session=HibernateSessionFactoryUtil.getSessionFactory().openSession();
      session.beginTransaction();
      Query query=session.createQuery("from Guestbook");
      Iterator it=query.iterate();
      while(it.hasNext()){
       Guestbook gb=(Guestbook)it.next();
       System.out.println("name: "+gb.getName()+"  Id:"+gb.getId());
      }
      Guestbook gb=(Guestbook)session.load(Guestbook.class, 2);
      System.out.println("name: "+gb.getName()+"  Id:"+gb.getId());
      session.getTransaction().commit();
     } 
    }

    运行效果:

    log4j:WARN No appenders could be found for logger (org.hibernate.cfg.Environment).
    log4j:WARN Please initialize the log4j system properly.
    Hibernate:
        select
            guestbook0_.id as col_0_0_
        from
            users.guestbook guestbook0_
    Hibernate:
        select
            guestbook0_.id as id0_0_,
            guestbook0_.version as version0_0_,
            guestbook0_.name as name0_0_,
            guestbook0_.email as email0_0_,
            guestbook0_.phone as phone0_0_,
            guestbook0_.title as title0_0_,
            guestbook0_.content as content0_0_,
            guestbook0_.created_time as created8_0_0_
        from
            users.guestbook guestbook0_
        where
            guestbook0_.id=?
    name: liuwei  Id:1
    Hibernate:
        select
            guestbook0_.id as id0_0_,
            guestbook0_.version as version0_0_,
            guestbook0_.name as name0_0_,
            guestbook0_.email as email0_0_,
            guestbook0_.phone as phone0_0_,
            guestbook0_.title as title0_0_,
            guestbook0_.content as content0_0_,
            guestbook0_.created_time as created8_0_0_
        from
            users.guestbook guestbook0_
        where
            guestbook0_.id=?
    name: Hongtenzone@foxmail.com  Id:2
    Hibernate:
        select
            guestbook0_.id as id0_0_,
            guestbook0_.version as version0_0_,
            guestbook0_.name as name0_0_,
            guestbook0_.email as email0_0_,
            guestbook0_.phone as phone0_0_,
            guestbook0_.title as title0_0_,
            guestbook0_.content as content0_0_,
            guestbook0_.created_time as created8_0_0_
        from
            users.guestbook guestbook0_
        where
            guestbook0_.id=?
    name: Hongten  Id:3
    Hibernate:
        select
            guestbook0_.id as id0_0_,
            guestbook0_.version as version0_0_,
            guestbook0_.name as name0_0_,
            guestbook0_.email as email0_0_,
            guestbook0_.phone as phone0_0_,
            guestbook0_.title as title0_0_,
            guestbook0_.content as content0_0_,
            guestbook0_.created_time as created8_0_0_
        from
            users.guestbook guestbook0_
        where
            guestbook0_.id=?
    name: HOngten  Id:4
    Hibernate:
        select
            guestbook0_.id as id0_0_,
            guestbook0_.version as version0_0_,
            guestbook0_.name as name0_0_,
            guestbook0_.email as email0_0_,
            guestbook0_.phone as phone0_0_,
            guestbook0_.title as title0_0_,
            guestbook0_.content as content0_0_,
            guestbook0_.created_time as created8_0_0_
        from
            users.guestbook guestbook0_
        where
            guestbook0_.id=?
    name: HOngten  Id:5
    Hibernate:
        select
            guestbook0_.id as id0_0_,
            guestbook0_.version as version0_0_,
            guestbook0_.name as name0_0_,
            guestbook0_.email as email0_0_,
            guestbook0_.phone as phone0_0_,
            guestbook0_.title as title0_0_,
            guestbook0_.content as content0_0_,
            guestbook0_.created_time as created8_0_0_
        from
            users.guestbook guestbook0_
        where
            guestbook0_.id=?
    name: HOngten  Id:6
    Hibernate:
        select
            guestbook0_.id as id0_0_,
            guestbook0_.version as version0_0_,
            guestbook0_.name as name0_0_,
            guestbook0_.email as email0_0_,
            guestbook0_.phone as phone0_0_,
            guestbook0_.title as title0_0_,
            guestbook0_.content as content0_0_,
            guestbook0_.created_time as created8_0_0_
        from
            users.guestbook guestbook0_
        where
            guestbook0_.id=?
    name: HOngten  Id:7
    name: Hongtenzone@foxmail.com  Id:2

    我们会看到这里和上面的查询结果不同的是,这次要少用一条select语句。这就是利用hibernate的二级缓存,

    他在内存中保留了我们要查询的id=2的这条记录,所以当我们再次查询的时候,是直接从缓存中读出来。

  • 相关阅读:
    [git]git的简单配置使用 (将你的代码上传到Github)
    学习进度报告【第六周】
    [错误解决]SpringMVC接收对象 中文乱码问题解决
    [架构]myeclipse配置SpringMVC 以及简单应用 教程
    [机器学习]AttributeError: module 'tensorflow' has no attribute 'ConfigProto' 报错解决方法
    [机器学习]RuntimeError: The Session graph is empty. Add operations to the graph before calling run(). 报错解决方法
    [python]机器学习 k-mean 聚类分析
    学习进度报告【第五周】
    学习进度报告【第四周】
    unity3d优化总结篇
  • 原文地址:https://www.cnblogs.com/hongten/p/2108837.html
Copyright © 2020-2023  润新知