MyBatis Enhanced Cache, Control your Caches precisely!
该插件主要是为了弥补MyBatis二级缓存控制上的不足,提高二级缓存Cache和数据库数据的同步性和一致性,处理各个Cache之间的关联关系。
该插件可以精确地管理MyBatis的二级缓存,实现对MyBatis二级缓存细粒度的控制。
当执行过对数据库表的更新操作(update、delete、insert)时,可以指定清除由特定的StatementId表示的查询语句产生的缓存。
当前的MyBaits对于缓存的比较粗糙,一般为一个Mapper配置一个Cache缓存,或者多个Mapper共用一个缓存。 而对缓存的维护都是独立的,缓存之间不会相互影响,指定的Mapper中的语句只会影响到该Mapper对应的Cache缓存。 有时候希望当执行某些更新操作时,能够刷新或者清空特定的查询语句产生的缓存,以避免数据不一致的情况。 ###举例
现有AMapper.xml 中定义了对数据库表ATable
的CRUD操作,BMapper定义了对数据库表BTable
的CRUD操作;
假设MyBatis的二级缓存开启,并且AMapper中使用了二级缓存,AMapper对应的二级缓存为ACache
;
除此之外,AMapper中还定义了一个跟BTable有关的查询语句,类似如下所述:
<select id="selectATableWidtJoin" resultMap="BaseResultMap" useCache="true">
select * from ATable left join BTable on ....
</select>
selectATableWithJoin
操作,该查询的缓存会被放置到对应的二级缓存ACache
中,
当再次执行相同的查询,则直接从二级缓存ACache
中;selectATableWithJoin
操作,该查询的结果直接从二级缓存ACache
中取,这时候就造成了**数据不一致**
的情况针对上述的问题,需要解决:
当BMapper执行对BTable的update操作时,指定刷新 ACache
中的 selectATableWithJoin
语句产生的缓存
该插件正是解决上述的这一问题!
使用此插件非常简单:
<plugins>
<plugin interceptor="org.luanlouis.mybatis.plugin.cache.EnhancedCachingExecutor">
<property name="dependency" value="dependencys.xml"/>
<property name="cacheEnabled" value="true"/>
</plugin>
</plugins>
<?xml version="1.0" encoding="UTF-8"?>
<dependencies>
<statements>
<statement id="com.louis.mybatis.dao.DepartmentsMapper.updateByPrimaryKey">
<observer id="com.louis.mybatis.dao.EmployeesMapper.selectWithDepartments" />
</statement>
</statements>
</dependencies>
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。