前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Hibernate中的二级缓存 EHCache

Hibernate中的二级缓存 EHCache

作者头像
Hongten
发布2018-09-18 10:01:58
5000
发布2018-09-18 10:01:58
举报
文章被收录于专栏:Hongten

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2011-07-17 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档