Java 框架 Mybatis 插件开发指南,超详细!
逆锋起笔
关注后回复编程pdf
来源:https://www.cnblogs.com/chenpi/p/10498921.html
作者:风一样的码农
背景
Mybatis插件典型适用场景
分页功能
公共字段统一赋值
性能监控
其它
Mybatis插件介绍
什么是Mybatis插件
支持拦截的方法
执行器Executor(update、query、commit、rollback等方法);
参数处理器ParameterHandler(getParameterObject、setParameters方法);
结果集处理器ResultSetHandler(handleResultSets、handleOutputParameters等方法);
SQL语法构建器StatementHandler(prepare、parameterize、batch、update、query等方法);
拦截阶段
读取mybatis的xml配置文件信息
通过SqlSessionFactoryBuilder创建SqlSessionFactory对象
通过SqlSessionFactory获取SqlSession对象
执行SqlSession对象的selectList方法,查询结果
关闭SqlSession
Mybatis插件实现机制
插件配置信息的加载
根据解析到的类信息创建Interceptor对象;
调用setProperties方法设置属性变量;
添加到Configuration的interceptorChain拦截器链中;
代理对象的生成
拦截逻辑的执行
Mybatis插件开发例子
intercept:在此实现自己的拦截逻辑,可从Invocation参数中拿到执行方法的对象,方法,方法参数,从而实现各种业务逻辑, 如下代码所示,从invocation中获取的statementHandler对象即为被代理对象,基于该对象,我们获取到了执行的原始SQL语句,以及prepare方法上的分页参数,并更改SQL语句为新的分页语句,最后调用invocation.proceed()返回结果。
plugin:生成代理对象;
setProperties:设置一些属性变量;
小结
设计模式:代理模式、责任链模式;
软件思想:AOP编程思想,降低模块间的耦合度,使业务模块更加独立;
不要定义过多的插件,代理嵌套过多,执行方法的时候,比较耗性能;
拦截器实现类的intercept方法里最后不要忘了执行invocation.proceed()方法,否则多个拦截器情况下,执行链条会断掉;
逆锋起笔
是一个专注于程序员圈子的技术平台,你可以收获最新技术动态
、最新内测资格
、BAT等大厂大佬的经验
、增长自身
、学习资料
、职业路线
、赚钱思维
,微信搜索逆锋起笔
关注!MyBatis 的执行流程,写得太好了!
关于 MyBatis 我总结了 10 种通用的写法
项目实战 Spring Boot视频教程 微服务整合Mybatis