转载地址 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的效果。

(12) Hibernate+EhCache配置二级缓存相关推荐

  1. (转)为Spring集成的Hibernate配置二级缓存

    http://blog.csdn.net/yerenyuan_pku/article/details/52896195 前面我们已经集成了Spring4.2.5+Hibernate4.3.11+Str ...

  2. 【MyBatis笔记12】MyBatis中二级缓存相关配置内容

    这篇文章,主要介绍MyBatis中二级缓存相关配置信息. 目录 一.MyBatis二级缓存 1.1.cache标签相关属性 (1)eviction属性 (2)size属性 (3)flushIntern ...

  3. Hibernate如何存储二级缓存条目

    介绍 使用数据库访问抽象层的好处是可以透明地实现缓存,而不会泄漏到业务逻辑代码中 . Hibernate Persistence Context充当事务后写式高速缓存 ,将实体状态转换转换为DML语句 ...

  4. Mybatis的一、二级缓存的原理与使用、禁止指定方法的二级缓存与刷新缓存、Mybatis整合Ehcache、二级缓存的使用场景与局限性-day03

    目录 第一节 Mybatis的缓存 1.1 Mybatis的缓存理解 1.2 一级缓存 原理 使用与测试 1.3 二级缓存 原理 使用与测试 禁用指定方法的二级缓存 刷新缓存 总结 1.4 整合ehc ...

  5. 在Spring + Hibernate中使用二级缓存配置步骤

    在SSH中用二级缓存大概分以下几步: 1.首先在hbm文件里对涉及到的对象设置缓存方式,或根据情况设置自己需要的 2.在ehcache的配置文件里配置一个cache,name为这个类名 3.在appl ...

  6. mysql ehcache_MyBatis使用Ehcache作为二级缓存

    特别说明:由于二级缓存是基于Mapper的,当你在不同的mapper中查询了相同的数据,例如不同的Mapper中有多表查询时结果中有相同的数据,当其中一个Mapper进行插入更新缓存时,另一个并没有插 ...

  7. MyBatis整合ehcache实现二级缓存

    添加jar包 <dependency><groupId>org.mybatis.caches</groupId><artifactId>mybatis- ...

  8. 转Spring+Hibernate+EHcache配置(二)

    Spring AOP+EHCache简单缓存系统解决方案 需要使用Spring来实现一个Cache简单的解决方案,具体需求如下:使用任意一个现有开源Cache Framework,要求可以Cache系 ...

  9. Hibernate二级缓存详解

    与Session相对的是,SessionFactory也提供了相应的缓存机制.SessionFactory缓存可以依据功能和目的的不同而划分为内置缓存和外置缓存.  SessionFactory的内置 ...

最新文章

  1. 计算机二级c语言109套,2016年9月计算机二级C语言操作题109套讲述.docx
  2. 剑指offer 数值的整次方
  3. c#Process.Start无法启动exe程序的问题
  4. Linux系统编程:mmap介绍和使用mmap实现进程间通信
  5. 图像数据转换成db(leveldb/lmdb)文件(转)
  6. 【Arthas】Arthas dump导出加载类
  7. 平面设计专业学什么?大学平面设计主修课程有哪些?
  8. 音频编码格式——AAC简介
  9. 中科银谷:企查查天眼查的企业工商数据是从哪里来的?
  10. 组装计算机硬盘的选购,组装电脑教程:DIY组装电脑怎么选择硬盘
  11. 初学者:关于html中的text-align文本居中属性详解
  12. 熊猫之死,是腾讯对360的又一次胜利
  13. 稳定排序与不稳定排序方法
  14. JaCoCo Report结果转换成excel
  15. Java 报错Attempted read from closed stream
  16. 从一到无穷大:科学中的事实和臆测 (G. 伽莫夫 著)
  17. 日历提醒软件Export Calendars Pro for Mac
  18. Fiddler抓包工的使用
  19. Java三层结构,附源码
  20. UI设计师都在用这5个网站,赶紧马住~

热门文章

  1. 【Java数据库】SQL时间类型Date Time Timestamp区别、插入/取出指定时间段的数据
  2. 文章转载-见贤思齐焉,见不贤而内自省也
  3. java安全编码指南之:声明和初始化
  4. JDK 15 JAVA 15的新特性展望
  5. activemq的使用(四)
  6. kafka消息反复从头开始消费问题排查
  7. jQuery——parent(),parents(),offsetParent(),closets()方法
  8. (*长期更新)软考网络工程师学习笔记——Section 14 Linux服务器配置
  9. controller调用controller的方法_你想过 Controller 这些方法里的参数是如何工作的吗?...
  10. JAVA里16进制和字节数组互转