摘要:本文学习了如何使用MyBatis插件对框架行为进行定制。
环境
Windows 10 企业版 LTSC 21H2
MySQL 5.7.40
Java 1.8
Maven 3.6.3
MyBatis 3.5.6
1 工作原理
MyBatis插件的本质是拦截器,允许用户通过插件来拦截框架内部的核心方法执行,从而改变底层行为。这种机制提供了一种非侵入式的方式来扩展或修改框架的功能,而无需修改源代码。
插件的实现基于Java的动态代理机制,通过拦截运行过程中的关键方法调用来实现特定功能。
拦截器工作原理:
- 在初始化时,会创建拦截器链。
- 当执行SQL操作时,请求会依次经过链上的各个拦截器。
- 每个拦截器可以选择对请求进行处理、修改或直接放行。
- 所有拦截器处理完成后,执行原始的业务逻辑。
2 拦截接口
MyBatis提供了四个核心接口供插件拦截,每个接口负责不同的职责。
2.1 Executor(核心调用器)
Executor是核心接口,负责执行SQL语句和管理查询缓存以及调度其他组件。
主要拦截方法:
- query:查询操作
- update:更新操作
- commit:提交事务
- rollback:回滚事务
常见用途:
- 事务控制
- 缓存管理
- 执行时间统计
2.2 StatementHandler(语句处理器)
StatementHandler负责准备SQL语句和执行JDBC操作。
主要拦截方法:
- prepare:准备语句
- parameterize:参数设置
- query:查询操作
- update:更新操作
- batch:批量操作
常见用途:
- SQL重写
- 分页处理
2.3 ParameterHandler(参数处理器)
ParameterHandler处理预编译语句中的参数值。
主要拦截方法:
- setParameters:参数设置
常见用途:
- 参数加密
- 参数验证
ResultSetHandler(结果集处理器)
ResultSetHandler处理JDBC结果集并将其转换为Java对象。
主要拦截方法:
- handleResultSets:处理结果集
- handleOutputParameters:处理输出参数
常见用途:
- 结果解密
- 结果过滤
- 数据脱敏
3 自定义插件
3.1 创建
实现Interceptor接口:
1 | // 使用@Intercepts注解标识拦截器 |
3.2 配置
在mybatis-config.xml配置文件中配置插件:
1 | <!-- 指定插件,可以配置多个插件 --> |
在执行查询的时候就会调用自定义插件的拦截方法。
条