Mybatis 学习笔记 —一级缓存二级缓存逆向工程
Posted Johnny*
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mybatis 学习笔记 —一级缓存二级缓存逆向工程相关的知识,希望对你有一定的参考价值。
Mybatis基础版 完结撒发
查询缓存
一级缓存
MyBatis 默认开启一级缓存,如果使用同一个的SqlSession对象执行相同的查询语句,则只会在第一次查询时向数据库发送SQL语句,并将查询结果放入到SqlSession中(作为缓存 存在)。后续再次执行相同的查询语句,则直接从缓存中查询该对象。减少了访问数据库的次数,提高性能。
一级缓存生命周期
- 如果SqlSession调用了close()方法,会释放掉一级缓存PerpetualCache对象,一级缓存将不可用。
- sqlSession 执行了任何一个update操作(update()、delete()、insert() )或者session。commit(),都会清空PrepetualCache对象中的数据,但是该对象可以继续使用。
二级缓存
二级缓存的使用
MyBatis 默认情况没有开启二级缓存,需要手动打开。
- 首先在MyBatis 的配置文件config.xml中声明开启缓存:
<settings>
……
<setting name="cacheEnabled" value="true" />
<settings>
- 然后在具体的mapper.xml中声明开启二级缓存
<cache/>
- 类序列化
准备缓存的对象,必须实现序列化接口。如序列化Person类,则Person的级联属性、和父类都要序列化。
sqlSession 对象执行session.close() 或者 查询自身的session.commit()时才触发将对象写入二级缓存
Mybatis 自带二级缓存,同一个namespace生成的mapper对象,可以共享同一份二级缓存。
禁用与清理
禁用
在select标签中增加 useCache=“false”
清理
- 与清理一级缓存方法相同,执行增删改的session.commit()时,会清理一级二级缓存。之所以执行增删改是清理缓存的原因是防止脏数据。
- 在select标签中加入属性 flushCache=“true”
使用三方提供的二级缓存 Ehcache
要想整合三方提供的二级缓存 (或者自定义二级缓存),必须实现org.apache.ibatis.cache.Cache接口,该接口的默认实现类是PerpetualCache
整合ehcache二级缓存:
-
类路径下引入以下jar
ehcache-core.jar
mybatis-Ehcache.jar
slf4j-api.jar -
编写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>
- 开启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 学习笔记 —一级缓存二级缓存逆向工程的主要内容,如果未能解决你的问题,请参考以下文章