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的这条记录,所以当我们再次查询的时候,是直接从缓存中读出来。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

扫码关注云+社区

领取腾讯云代金券