Mybatis 学习笔记 —一级缓存二级缓存逆向工程

Posted Johnny*

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mybatis 学习笔记 —一级缓存二级缓存逆向工程相关的知识,希望对你有一定的参考价值。

Mybatis基础版 完结撒发

查询缓存

一级缓存

MyBatis 默认开启一级缓存,如果使用同一个的SqlSession对象执行相同的查询语句,则只会在第一次查询时向数据库发送SQL语句,并将查询结果放入到SqlSession中(作为缓存 存在)。后续再次执行相同的查询语句,则直接从缓存中查询该对象。减少了访问数据库的次数,提高性能。

一级缓存生命周期

在这里插入图片描述

  1. 如果SqlSession调用了close()方法,会释放掉一级缓存PerpetualCache对象,一级缓存将不可用。
  2. sqlSession 执行了任何一个update操作(update()、delete()、insert() )或者session。commit(),都会清空PrepetualCache对象中的数据,但是该对象可以继续使用。

mybatis一级缓存和二级缓存

二级缓存

二级缓存的使用

MyBatis 默认情况没有开启二级缓存,需要手动打开。

  1. 首先在MyBatis 的配置文件config.xml中声明开启缓存:
<settings>
……
	<setting name="cacheEnabled"  value="true" />
<settings>
  1. 然后在具体的mapper.xml中声明开启二级缓存
<cache/>
  1. 类序列化
    准备缓存的对象,必须实现序列化接口。如序列化Person类,则Person的级联属性、和父类都要序列化。

sqlSession 对象执行session.close() 或者 查询自身的session.commit()时才触发将对象写入二级缓存

Mybatis 自带二级缓存,同一个namespace生成的mapper对象,可以共享同一份二级缓存。

禁用与清理

禁用

在select标签中增加 useCache=“false”

清理

  1. 与清理一级缓存方法相同,执行增删改的session.commit()时,会清理一级二级缓存。之所以执行增删改是清理缓存的原因是防止脏数据。
  2. 在select标签中加入属性 flushCache=“true”

使用三方提供的二级缓存 Ehcache

要想整合三方提供的二级缓存 (或者自定义二级缓存),必须实现org.apache.ibatis.cache.Cache接口,该接口的默认实现类是PerpetualCache

整合ehcache二级缓存:

  1. 类路径下引入以下jar
    ehcache-core.jar
    mybatis-Ehcache.jar
    slf4j-api.jar

  2. 编写ehcache配置文件 Ehcache.xml

<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../config/ehcache.xsd">
  <!--当二级缓存的对象 超过内存限制时(缓存对象的个数>maxElementsInMemory),存放入的硬盘文件  -->
 <diskStore path="D:\\Ehcache"/>
 <!-- 
 	maxElementsInMemory:设置 在内存中缓存 对象的个数
    maxElementsOnDisk:设置 在硬盘中缓存 对象的个数
    eternal:设置缓存是否 永远不过期
    overflowToDisk:当内存中缓存的对象个数 超过maxElementsInMemory的时候,是否转移到硬盘中
    timeToIdleSeconds:当2次访问 超过该值的时候,将缓存对象失效 
    timeToLiveSeconds:一个缓存对象 最多存放的时间(生命周期)
    diskExpiryThreadIntervalSeconds:设置每隔多长时间,通过一个线程来清理硬盘中的缓存
    memoryStoreEvictionPolicy:当超过缓存对象的最大值时,处理的策略;LRU,FIFO,LFU
  -->		     
 
 <defaultCache
  maxElementsInMemory="1000"
  maxElementsOnDisk="1000000"
  eternal="false"
  overflowToDisk="false"
  timeToIdleSeconds="100"
  timeToLiveSeconds="100"
  diskExpiryThreadIntervalSeconds="120"
  memoryStoreEvictionPolicy="LRU">
 </defaultCache>
</ehcache>
  1. 开启EhCache二级缓存

在xxxMapper.xml中开启

<cache  type="org.mybatis.caches.ehcache.EhcacheCache">
<!-- 通过property覆盖Ehcache.xml中的值 -->
<property name="maxElementsInMemory" value="2000"/>
<property name="maxElementsOnDisk" value="3000"/>
</cache>

逆向工程

表、类、接口、mapper.xml四者密切相关,因此 当知道一个的时候 其他三个应该可以自动生成。
表->其他三个

实现步骤:
a. mybatis-generator-core.jar、mybatis.jar、ojdbc.jar
b. 逆向工程的配置文件generator.xml
c. 执行

以上是关于Mybatis 学习笔记 —一级缓存二级缓存逆向工程的主要内容,如果未能解决你的问题,请参考以下文章

学习MyBatis

学习MyBatis

学习MyBatis

MyBatis的一级缓存和二级缓存简介笔记

Mybatis逆向工程,缓存,代理知识要点

mybatis学习--缓存(一级和二级缓存)