(12) Hibernate+EhCache配置二级缓存

转载地址 http://jyao.iteye.com/blog/1315726

(有关EhCache的基础介绍可参见:http://sjsky.iteye.com/blog/1288257 )

本文主要讲一讲Hibernate+EhCache配置二级缓存的基本使用方法,主要分以下两个方面介绍:

一Cache的多种配置方法

二Hibernate+EhCache集成demo

[一]、Cache的多种配置方法

Javabean cache的配置有三种,下面将一一介绍,具体如下::

(1).bean中注解配置的方式:@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)

(2).hibernate.cfg.xml中标签配置方式:<class-cache class="" usage="" />

(3).映射文件*.hb.xml中标签配置方式:<cache usage=" />

classpath:ehcahce.xml配置文件如下:

<?xml version="1.0" encoding="UTF-8"?>  
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
         xsi:noNamespaceSchemaLocation="ehcache.xsd"  
         updateCheck="true" monitoring="autodetect"  
         dynamicConfig="true">  
  
    <diskStore path="java.io.tmpdir"/>  
  
    <transactionManagerLookup class="net.sf.ehcache.transaction.manager.DefaultTransactionManagerLookup"  
                              properties="jndiName=java:/TransactionManager" propertySeparator=";"/>  
  
    <cacheManagerEventListenerFactory class="" properties=""/>  
  
    <defaultCache  
            maxElementsInMemory="100"  
            eternal="false"  
            timeToIdleSeconds="120"  
            timeToLiveSeconds="120"  
            overflowToDisk="true"  
            diskSpoolBufferSizeMB="30"  
            maxElementsOnDisk="100"  
            diskPersistent="false"  
            diskExpiryThreadIntervalSeconds="120"  
            memoryStoreEvictionPolicy="LRU"  
            statistics="false"  
            />  
  
    <cache name="org.hibernate.cache.StandardQueryCache"  
        maxElementsInMemory="5"   
        eternal="false"   
        timeToLiveSeconds="120"  
        overflowToDisk="true" />  
  
    <cache name="org.hibernate.cache.UpdateTimestampsCache"  
        maxElementsInMemory="5000"   
        eternal="true"   
        overflowToDisk="true" />  
  
    <cache name="sampleCache1"  
           maxElementsInMemory="10000"  
           maxElementsOnDisk="1000"  
           eternal="false"  
           overflowToDisk="true"  
           diskSpoolBufferSizeMB="20"  
           timeToIdleSeconds="300"  
           timeToLiveSeconds="600"  
           memoryStoreEvictionPolicy="LFU"  
           transactionalMode="off"  
            />  
  
    <cache name="sampleCache2"  
           maxElementsInMemory="1000"  
           eternal="true"  
           overflowToDisk="false"  
           memoryStoreEvictionPolicy="FIFO"  
            />  
</ehcache>  

2 hibernate配置文件:hibernate.cfg.xml

<!DOCTYPE hibernate-configuration  
    PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN"  
    "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">  
  
<hibernate-configuration>  
  
    <session-factory>  
        <property name="connection.driver_class">  
            oracle.jdbc.driver.OracleDriver  
        </property>  
        <property name="connection.url">  
            jdbc:oracle:thin:@localhost:1521:ora11g  
        </property>  
        <property name="connection.username">mytest</property>  
        <property name="connection.password">111111</property>  
  
        <property name="dialect">  
            org.hibernate.dialect.Oracle9Dialect  
        </property>  
  
        <property name="connection.useUnicode">true</property>  
        <property name="connection.characterEncoding">UTF-8</property>  
        <property name="connection.SetBigStringTryClob">true</property>  
        <property name="connection.pool_size">10</property>  
        <property name="hibernate.jdbc.batch_size">10</property>  
  
  
        <property name="show_sql">true</property>  
        <property name="format_sql">false</property>  
        <property name="current_session_context_class">thread</property>  
        <property name="hbm2ddl.auto">update</property>  
        <!--  Hibernate 3.3 and higher -->  
        <!--  
        <property name="hibernate.cache.region.factory_class">  
            net.sf.ehcache.hibernate.EhCacheRegionFactory  
        </property>  
        <property name="hibernate.cache.region.factory_class">  
            net.sf.ehcache.hibernate.SingletonEhCacheRegionFactory  
        </property>  
        -->  
        <!-- hibernate3.0-3.2 cache config-->  
        <!--   
        <property name="hibernate.cache.region.factory_class">  
            net.sf.ehcache.hibernate.EhCacheProvider  
        </property>  
        -->  
        <property name="hibernate.cache.provider_class">  
            net.sf.ehcache.hibernate.SingletonEhCacheProvider  
        </property>  
          
        <!-- Enable Second-Level Cache and Query Cache Settings -->  
        <property name="hibernate.cache.use_second_level_cache">  
            true  
        </property>  
        <property name="hibernate.cache.use_query_cache">  
            true  
        </property>  
  
        <!-- 注解配置  -->  
        <mapping class="michael.cache.ehcache.hibernate.EhUserInfo" />  
        <mapping class="michael.cache.ehcache.hibernate.EhBlogTopic" />  
        <mapping class="michael.cache.ehcache.hibernate.EhBlogTopic2" />  
  
        <!-- 映射文件 -->  
        <mapping  
            resource="michael/cache/ehcache/hibernate/tb_EhBlogTopic3.hb.xml" />  
  
        <!-- class-cache config -->  
        <class-cache class="michael.cache.ehcache.hibernate.EhBlogTopic"  
            usage="read-write" />  
  
    </session-factory>  
</hibernate-configuration>  

3.相关javabean代码片段如下:

(1).hibernate.cfg.xml中<calss-cache>标签配置的:EhBlogTopic.java:

/** 
 * @blog http://sjsky.iteye.com 
 * @author Michael 
 */  
@Entity  
@Table(name = "MY_TB_EH_BLOG_TOPIC")  
public class EhBlogTopic implements Serializable {  
  
    /** 
     * serialVersionUID 
     */  
    private static final long serialVersionUID = -570936907944909799L;  
  
    private Integer id;  
  
    private String userId;  
  
    private String topic;  
  
    private String site;  
  
    //其他省略  
}  

(2). bean中注解的方式配置cache的:EhBlogTopic2.java

/** 
 * @blog http://sjsky.iteye.com 
 * @author Michael 
 */  
@Entity  
@Table(name = "MY_TB_EH_BLOG_TOPIC2")  
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)  
public class EhBlogTopic2 implements Serializable {  
      //属性和EhBlogTopic一样  
     //其他省略  
}  
. 映射文件*.hb.xml中添加cache标签的: EhBlogTopic3.java
/** 
 * @blog http://sjsky.iteye.com 
 * @author Michael 
 */  
public class EhBlogTopic3 implements Serializable {  
   //属性和EhBlogTopic一样  
   //其他省略  
}  

(3). 映射文件*.hb.xml中添加cache标签的:EhBlogTopic3.java

/**
 *@blog http://sjsky.iteye.com
 *@author Michael
 */ 
public class EhBlogTopic3 implementsSerializable { 
   //属性和EhBlogTopic一样 
   //其他省略 
}  



 tb_EhBlogTopic3.hb.xml

<?xml version="1.0"?>  
<!DOCTYPE hibernate-mapping PUBLIC  
    "-//Hibernate/Hibernate Mapping DTD 2.0//EN"  
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  
  
<hibernate-mapping package="michael.cache.ehcache.hibernate">  
  
    <class name="EhBlogTopic3" table="MY_TB_EH_BLOG_TOPIC3">  
        <cache usage="read-write" />  
        <id name="id" type="int" unsaved-value="null">  
            <generator class="increment" />  
        </id>  
        <property name="userId" column="USER_ID" type="string"  
            not-null="false" length="20" />  
  
        <property name="topic" column="TOPIC" type="string"  
            not-null="false" length="100" />  
        <property name="site" column="SITE" type="string"  
            not-null="false" length="100" />  
  
    </class>  
</hibernate-mapping>  

没有配置cache的bean:EhUserInfo.java

/** 
 * @blog http://sjsky.iteye.com 
 * @author Michael 
 */  
@Entity  
@Table(name = "MY_TB_EH_USER_INFO")  
public class EhUserInfo implements Serializable {  
  
    /** 
     * serialVersionUID 
     */  
    private static final long serialVersionUID = 930384253681679239L;  
  
    private Integer id;  
  
    private String userId;  
  
    private String userName;  
  
    private String otherInfo;  
  
    /** 
     * @return the id 
     */  
    @Id  
    @GeneratedValue  
    @Column(name = "ID")  
    public Integer getId() {  
        return id;  
    }  
  
  //其他省略。。。  
  
}  

4.测试运行代码如下:

package michael.cache.ehcache.hibernate;  
  
import java.util.List;  
  
import michael.hibernate.bigstring.oracle.BigStrBlob;  
import net.sf.ehcache.Cache;  
import net.sf.ehcache.CacheManager;  
  
import org.hibernate.Query;  
import org.hibernate.Session;  
import org.hibernate.SessionFactory;  
import org.hibernate.Transaction;  
import org.hibernate.cfg.AnnotationConfiguration;  
import org.hibernate.cfg.Configuration;  
  
/** 
 *  
 * @blog http://sjsky.iteye.com 
 * @author Michael 
 */  
public class TestEhcacheHibernate {  
  
    /** 
     * @param args 
     */  
    @SuppressWarnings("unchecked")  
    public static void main(String[] args) {  
        testMulitConfigMethod();  
    }  
  
    /** 
     * 测试多种配置缓存的方法 
     */  
    public static void testMulitConfigMethod() {  
        SessionFactory sessionFactory = null;  
        try {  
            System.out.println("ehcache - hibernate Test ...");  
            Configuration config = new AnnotationConfiguration()  
                    .configure("michael/cache/ehcache/hibernate/hibernate.cfg.xml");  
            System.out.println("hibernate config successful :" + config);  
            sessionFactory = config.buildSessionFactory();  
            Transaction ta = null;  
            try {  
                Session session = sessionFactory.getCurrentSession();  
                ta = session.beginTransaction();  
            } catch (Exception e) {  
                e.printStackTrace();  
                ta.rollback();  
            }  
            String[] cacheNames = CacheManager.getInstance().getCacheNames();  
            System.out.println("缓存的key cacheNames length := "  
                    + cacheNames.length + " 具体详细列表如下:");  
            for (String name : cacheNames) {  
                System.out.println("name := " + name);  
            }  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
        System.out.println("ehcache - hibernate Test end.");  
    }  
}  

运行结果如下:


ehcache - hibernate Test ...
hibernate config successful :org.hibernate.cfg.AnnotationConfiguration@193c0cf
2011-12-15 11:32:36 net.sf.ehcache.hibernate.AbstractEhcacheProvider buildCache
警告: Could not find a specific ehcache configuration for cache named [michael.cache.ehcache.hibernate.EhBlogTopic]; using defaults.
2011-12-15 11:32:36 net.sf.ehcache.hibernate.AbstractEhcacheProvider buildCache
警告: Could not find a specific ehcache configuration for cache named [michael.cache.ehcache.hibernate.EhBlogTopic2]; using defaults.
2011-12-15 11:32:36 net.sf.ehcache.hibernate.AbstractEhcacheProvider buildCache
警告: Could not find a specific ehcache configuration for cache named [michael.cache.ehcache.hibernate.EhBlogTopic3]; using defaults.
2011-12-15 11:32:37 net.sf.ehcache.util.UpdateChecker doCheck
信息: New update(s) found: 2.4.6 [http://www.terracotta.org/confluence/display/release/Release+Notes+Ehcache+Core+2.4]. Please check http://ehcache.org for the latest version.
缓存的key cacheNames length := 7 具体详细列表如下:
name := sampleCache2
name := michael.cache.ehcache.hibernate.EhBlogTopic2 
name := org.hibernate.cache.UpdateTimestampsCache
name := sampleCache1
name := michael.cache.ehcache.hibernate.EhBlogTopic 
name := org.hibernate.cache.StandardQueryCache
name := michael.cache.ehcache.hibernate.EhBlogTopic3 
ehcache - hibernate Test end.

从运行结果可见:三种方式的缓存配置都已经成功。

[]Hibernate+EhCache集成demo

 1.分别初始化EhUserInfo(没有配置cache的)和EhBlogTopic(配置过cache的)数据如下:

EhUserInfo:


EhBlogTopic: 



 2.演示代码:

package michael.cache.ehcache.hibernate;  
  
import java.util.List;  
  
import michael.hibernate.bigstring.oracle.BigStrBlob;  
import net.sf.ehcache.Cache;  
import net.sf.ehcache.CacheManager;  
  
import org.hibernate.Query;  
import org.hibernate.Session;  
import org.hibernate.SessionFactory;  
import org.hibernate.Transaction;  
import org.hibernate.cfg.AnnotationConfiguration;  
import org.hibernate.cfg.Configuration;  
  
/** 
 *  
 * @blog http://sjsky.iteye.com 
 * @author Michael 
 */  
public class TestEhcacheHibernate {  
  
    /** 
     * @param args 
     */  
    @SuppressWarnings("unchecked")  
    public static void main(String[] args) {  
        SessionFactory sessionFactory = null;  
        try {  
            System.out.println("ehcache - hibernate Test ...");  
            Configuration config = new AnnotationConfiguration()  
                    .configure("michael/cache/ehcache/hibernate/hibernate.cfg.xml");  
  
            sessionFactory = config.buildSessionFactory();  
            System.out.println("buildSessionFactory===============");  
  
            System.out.println("====================================");  
            System.out.println("session open ....");  
            System.out.println("同一个session(一级缓存默认的)中,没有配置cache的Bean");  
            Transaction ta = null;  
            try {  
                Session session = sessionFactory.getCurrentSession();  
                String hsql = "select t from EhUserInfo t ";  
                ta = session.beginTransaction();  
                Query query = session.createQuery(hsql);  
                System.out.println("查询全部query.list().size:"  
                        + query.list().size());  
  
                System.out.println("再根据ID=1查询某记录时不会再去查数据库,故不会打印hsql");  
                EhUserInfo vo1 = (EhUserInfo) session.get(EhUserInfo.class, 1);  
                System.out.println("根据ID=1找到的记录:" + vo1);  
                ta.commit();  
            } catch (Exception e) {  
                e.printStackTrace();  
                ta.rollback();  
            }  
            System.out.println("session closed.");  
  
            System.out.println("session open ....");  
            try {  
                Session session = sessionFactory.getCurrentSession();  
                ta = session.beginTransaction();  
                System.out.println("第一次根据ID=1查询某记录时,会打印hsql");  
                EhUserInfo vo1 = (EhUserInfo) session.get(EhUserInfo.class, 1);  
                System.out.println("根据ID=1找到的记录:" + vo1);  
                ta.commit();  
            } catch (Exception e) {  
                e.printStackTrace();  
                ta.rollback();  
            }  
            System.out.println("session closed.");  
  
            System.out.println("====================================");  
            System.out.println("当前同一个sessionFactory,没有配置cache的Bean,");  
            System.out.println("session open ....");  
            try {  
                Session session = sessionFactory.getCurrentSession();  
                ta = session.beginTransaction();  
                System.out.println("第一次根据ID=1查询记录时会再去查数据库,故打印hsql如下:");  
                EhUserInfo vo1 = (EhUserInfo) session.get(EhUserInfo.class, 1);  
                System.out.println("根据ID=1找到的记录:" + vo1);  
                ta.commit();  
            } catch (Exception e) {  
                e.printStackTrace();  
                ta.rollback();  
            }  
            System.out.println("session closed.");  
            System.out.println("====================================");  
            String[] cacheNames = CacheManager.getInstance().getCacheNames();  
            System.out.println("缓存的key cacheNames length := "  
                    + cacheNames.length);  
            for (String name : cacheNames) {  
                System.out.println("name := " + name);  
            }  
  
            System.out.println("====================================");  
            System.out.println("同一个session(一级缓存默认的)中,配置cache的Bean");  
  
            System.out.println("session open ....");  
            try {  
                Session session = sessionFactory.getCurrentSession();  
                String hsql = "select t from EhBlogTopic t ";  
                ta = session.beginTransaction();  
                Query query = session.createQuery(hsql);  
                query.setCacheable(true);  
                System.out.println("查询全部query.list().size:"  
                        + query.list().size());  
  
                Cache myCache1 = CacheManager.getInstance().getCache(  
                        "michael.cache.ehcache.hibernate.EhBlogTopic");  
                System.out.println("查询到EhBlogTopic cache size:"  
                        + myCache1.getKeys().size());  
                myCache1 = CacheManager.getInstance().getCache(  
                        "michael.cache.ehcache.hibernate.EhBlogTopic");  
                System.out.println("EhBlogTopic cache size:"  
                        + myCache1.getKeys().size() + ",详细记录如下:");  
                for (Object str : myCache1.getKeys()) {  
                    System.out.println(str);  
                }  
  
                System.out  
                        .println("在同一个session,再根据ID=1查询记录时不会再去查数据库,故不会打印hsql");  
                EhBlogTopic vo1 = (EhBlogTopic) session.get(EhBlogTopic.class,  
                        1);  
                System.out.println("根据ID=1找到的记录:" + vo1);  
                EhBlogTopic vo2 = new EhBlogTopic();  
                vo2.setId(10);  
                vo2.setUserId("michael");  
                vo2.setTopic("Myblog:11");  
                vo2.setSite("http://sjsky.iteye.com");  
                session.save(vo2);  
                ta.commit();  
                System.out.println("新增加一条记录ID=10");  
            } catch (Exception e) {  
                e.printStackTrace();  
                ta.rollback();  
            }  
            System.out.println("session closed.");  
  
            System.out.println("====================================");  
            Cache myCache1 = CacheManager.getInstance().getCache(  
                    "michael.cache.ehcache.hibernate.EhBlogTopic");  
            System.out.println("EhBlogTopic cache size:"  
                    + myCache1.getKeys().size() + ",详细记录如下:");  
            for (Object str : myCache1.getKeys()) {  
                System.out.println(str);  
            }  
  
            System.out.println("====================================");  
            System.out.println("在当前同一个sessionFactory,配置cache的bean");  
            System.out.println("session open ....");  
            try {  
                Session session = sessionFactory.getCurrentSession();  
                ta = session.beginTransaction();  
                System.out  
                        .println("不管是否第一次查询ID=1的记录,如果cache中存在的,则不会再查数据库,故不打印hsql");  
                EhBlogTopic vo1 = (EhBlogTopic) session.get(EhBlogTopic.class,  
                        1);  
                System.out.println("根据ID=1找到的记录:" + vo1);  
                System.out.println("查询之前session保存的数据ID=10,也不会再查数据库,故不打印hsql");  
                EhBlogTopic vo2 = (EhBlogTopic) session.get(EhBlogTopic.class,  
                        10);  
                System.out.println("根据之前save的ID=10找到的记录:" + vo2);  
                ta.commit();  
            } catch (Exception e) {  
                e.printStackTrace();  
                ta.rollback();  
            }  
            System.out.println("session closed.");  
        } catch (Exception e) {  
            e.printStackTrace();  
        } finally {  
            if (null != sessionFactory) {  
                sessionFactory.close();  
  
            }  
        }  
        System.out.println("sessionFactory  closed.");  
    }  
}  

运行结果如下:

ehcache - hibernate Test ...
2011-12-15 13:27:15 net.sf.ehcache.hibernate.AbstractEhcacheProvider buildCache
警告: Could not find a specific ehcache configuration for cache named [michael.cache.ehcache.hibernate.EhBlogTopic]; using defaults.
2011-12-15 13:27:15 net.sf.ehcache.hibernate.AbstractEhcacheProvider buildCache
警告: Could not find a specific ehcache configuration for cache named [michael.cache.ehcache.hibernate.EhBlogTopic2]; using defaults.
2011-12-15 13:27:15 net.sf.ehcache.hibernate.AbstractEhcacheProvider buildCache
警告: Could not find a specific ehcache configuration for cache named [michael.cache.ehcache.hibernate.EhBlogTopic3]; using defaults.
buildSessionFactory===============
====================================
session open ....
同一个session(一级缓存默认的)中,没有配置cache的Bean
Hibernate: select ehuserinfo0_.ID as ID1_, ehuserinfo0_.USER_ID as USER2_1_, ehuserinfo0_.USER_NAME as USER3_1_, ehuserinfo0_.OHTER_INFO as OHTER4_1_ from MY_TB_EH_USER_INFO ehuserinfo0_
查询全部query.list().size:2
再根据ID=1查询某记录时不会再去查数据库,故不会打印hsql
根据ID=1找到的记录:michael.cache.ehcache.hibernate.EhUserInfo@63b2e6
session closed.
session open ....
第一次根据ID=1查询某记录时,会打印hsql
Hibernate: select ehuserinfo0_.ID as ID1_0_, ehuserinfo0_.USER_ID as USER2_1_0_, ehuserinfo0_.USER_NAME as USER3_1_0_, ehuserinfo0_.OHTER_INFO as OHTER4_1_0_ from MY_TB_EH_USER_INFO ehuserinfo0_ where ehuserinfo0_.ID=?
根据ID=1找到的记录:michael.cache.ehcache.hibernate.EhUserInfo@123a389
session closed.
====================================
当前同一个sessionFactory,没有配置cache的Bean,
session open ....
第一次根据ID=1查询记录时会再去查数据库,故打印hsql如下:
Hibernate: select ehuserinfo0_.ID as ID1_0_, ehuserinfo0_.USER_ID as USER2_1_0_, ehuserinfo0_.USER_NAME as USER3_1_0_, ehuserinfo0_.OHTER_INFO as OHTER4_1_0_ from MY_TB_EH_USER_INFO ehuserinfo0_ where ehuserinfo0_.ID=?
根据ID=1找到的记录:michael.cache.ehcache.hibernate.EhUserInfo@429c19
session closed.
====================================
缓存的key cacheNames length := 7
name := sampleCache2
name := michael.cache.ehcache.hibernate.EhBlogTopic2
name := org.hibernate.cache.UpdateTimestampsCache
name := sampleCache1
name := michael.cache.ehcache.hibernate.EhBlogTopic
name := org.hibernate.cache.StandardQueryCache
name := michael.cache.ehcache.hibernate.EhBlogTopic3
====================================
同一个session(一级缓存默认的)中,配置cache的Bean
session open ....
Hibernate: select ehblogtopi0_.ID as ID2_, ehblogtopi0_.USER_ID as USER2_2_, ehblogtopi0_.TOPIC as TOPIC2_, ehblogtopi0_.SITE as SITE2_ from MY_TB_EH_BLOG_TOPIC ehblogtopi0_
查询全部query.list().size:9
查询到EhBlogTopic cache size:9
EhBlogTopic cache size:9,详细记录如下:
michael.cache.ehcache.hibernate.EhBlogTopic#6
michael.cache.ehcache.hibernate.EhBlogTopic#5
michael.cache.ehcache.hibernate.EhBlogTopic#7
michael.cache.ehcache.hibernate.EhBlogTopic#8
michael.cache.ehcache.hibernate.EhBlogTopic#2
michael.cache.ehcache.hibernate.EhBlogTopic#9
michael.cache.ehcache.hibernate.EhBlogTopic#1
michael.cache.ehcache.hibernate.EhBlogTopic#4
michael.cache.ehcache.hibernate.EhBlogTopic#3
在同一个session,再根据ID=1查询记录时不会再去查数据库,故不会打印hsql
根据ID=1找到的记录:michael.cache.ehcache.hibernate.EhBlogTopic@11a0d35
Hibernate: insert into MY_TB_EH_BLOG_TOPIC (USER_ID, TOPIC, SITE, ID) values (?, ?, ?, ?)
新增加一条记录ID=10
session closed.
====================================
EhBlogTopic cache size:10,详细记录如下:
michael.cache.ehcache.hibernate.EhBlogTopic#6
michael.cache.ehcache.hibernate.EhBlogTopic#5
michael.cache.ehcache.hibernate.EhBlogTopic#7
michael.cache.ehcache.hibernate.EhBlogTopic#8
michael.cache.ehcache.hibernate.EhBlogTopic#2
michael.cache.ehcache.hibernate.EhBlogTopic#9
michael.cache.ehcache.hibernate.EhBlogTopic#10
michael.cache.ehcache.hibernate.EhBlogTopic#1
michael.cache.ehcache.hibernate.EhBlogTopic#4
michael.cache.ehcache.hibernate.EhBlogTopic#3
====================================
在当前同一个sessionFactory,配置cache的bean
session open ....
不管是否第一次查询ID=1的记录,如果cache中存在的,则不会再查数据库,故不打印hsql
根据ID=1找到的记录:michael.cache.ehcache.hibernate.EhBlogTopic@1321f5
查询之前session保存的数据ID=10,也不会再查数据库,故不打印hsql
根据之前save的ID=10找到的记录:michael.cache.ehcache.hibernate.EhBlogTopic@1a6518
session closed.
sessionFactory closed.

我们从上面的详细运行日志中就可以看出cache的效果。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值