Mybatis 学习笔记(六) —一级缓存、二级缓存、逆向工程

Mybatis基础版 完结撒发

查询缓存

一级缓存

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

一级缓存生命周期

Mybatis 学习笔记(六) —一级缓存、二级缓存、逆向工程_第1张图片

  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">
  
 <diskStore path="D:\Ehcache"/>
 		     
 
 <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 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,一级缓存,二级缓存,逆向工程)