mysql拦截器实现crud_使用mybatis拦截器Interceptor实现运行时sql打印及数据库CRUD后的缓存清理...

191f5119bddaa2e5b4209ef608bf712c.png

定义数据库CRUD后的处理接口

有时候我们在数据库的CRUD操作后,需要做一些缓存的清理或缓存的重置;比如select操作后添加到缓存,update、insert、delete操作后需要清理缓存。我们定义一个接口AfterCrud用于实现CRUD后的操作。

实现mybatis拦截器Interceptor

基于mybatis拦截器Interceptor可以做很多有趣的事情,著名的开源项目PageHelper就是基于mybatis拦截器Interceptor和ThreadLocal实现的。我们这里实现的拦截器主要有两个功能,一个是打印运行时的sql便于监控耗时信息,另一个是拦截数据库写操作后做一些缓存清理的工作。

SqlInterceptor实现了Interceptor接口,构造方法可以根据传入的参数决定是否开启打印日志功能,是否支持CRUD后的一些额外的操作比如清理缓存等。

实现AfterCrud接口,做缓存清理操作

AfterCrudImpl实现AfterCrud接口负责处理一些缓存清理的操作:

上面的代码CacheManagerFactory的核心代码片段:

mybatis拦截器Interceptor其实是责任链模式,由于项目使用过程中使用了PageHelper,导致向SqlSessionFactory中加入拦截器时不生效,解决办法是在springboot的启动类上排除掉PageHelperAutoConfiguration:

同时自定义一个InterceptorConfig并把PageHelperAutoConfiguration中的代码拷贝出来改造如下:

我们的拦截器要加到PageInterceptor的后面,否则不生效,具体原因请参考PageHelper的PageInterceptor的实现。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值