mybatis插件原理与编写

mybatis插件是一种运行时增强机制,允许sql执行的关键环节插入自定义逻辑,而无需修改源码,其基于jdk动态代理与责任链模式,

可以拦截以下组件:

executor,执行增删改查

parameterhandler,处理参数

resultsethandler,处理结果集

statementhandler,管理jdbc statement

运行机制:

1.加载阶段:mybatis启动解析mybatis-config.xml中的插件,将实现intercept接口的插件注册到interceptorchain

2.代理生成:创建核心对象(如executor)时,interceptorchain调用插件的plugin()方法,通过plugin.warp()生成代理对象,

3.方法拦截:调用被代理对象的方法时,触发intercept(),可在调用前后植入逻辑,再通过invocation.proceed方法执行元方法,

4.多插件顺序,按配置顺序生成代理链,后配置的先执行

插件编写步骤:

1.实现interceptor接口

2.定义拦截点,使用@intercepts+@signture注解指定拦截的接口,方法及其参数类型,

3.在intercept()方法中实现增强逻辑,

4.生成代理plugin()方法中调用plugin.warp(target,this)

5.处理属性,setproperties()接受配置参数

6.注册插件,在mybatis-config.xml中标签

常见场景:

拦截executor,获取sql,添加limit

拦截statementhandler,获取sql,多租户改写

拦截executor,设置数据库标识,读写分离

拦截statementhandler,sql慢查询监控

拦截parameterhandler,对指定参数脱敏

拦截resultsethandler,对数据库中解密数据进行解密

相关推荐
毕业设计70339 分钟前
(免费领源码)基于node的学生公寓管理系统06412- java、PHP、python、C#、小程序、大数据、单片机、网络工程等)
vue.js·mysql·node.js·maven·mybatis·express·b/s
驭渊的小故事14 小时前
MyBatis XML 开发实战:从配置到 CRUD 全解析
xml·java·mybatis
云絮.1 天前
Mybatis(一)
java·数据库·mybatis
她的男孩3 天前
权限通了、列表有数,一点分页就炸Forge Admin 用 COUNT(1) 扛住复杂待办
java·spring boot·mybatis
paopaokaka_luck4 天前
基于springboot+vue的智慧家政管理系统(AI问答、 WebSocket实时沟通、ECharts运营分析、订单规则与服务追踪)
java·javascript·spring boot·数据分析·echarts·mybatis
大牧师4 天前
Mybatis 框架教程
java·数据库·mybatis·数据持久化·orm
代码什么用4 天前
MyBatis使用PageHelper && MyBatis的注解式开发
mybatis
VX_bysjlw9854 天前
数码设备销售网站设计与实现39138-计算机毕设原创(免费领源码+带部署教程)
java·vue.js·spring boot·mysql·tomcat·mybatis·idea
天空鸟_时光不老5 天前
13-亮点提炼:把技术说辞翻译成业务价值
java·spring boot·spring·spring cloud·mybatis
禾小西6 天前
Redis AOF 日志:宕机了,如何避免数据丢失?
java·redis·mybatis