插件开发高级应用专题测试
考察知识点
- 插件代理链原理:JDK 动态代理、Plugin.wrap 机制、嵌套代理结构
- 多插件执行顺序:XML 配置顺序与 intercept 调用顺序、代理链短路机制
- 分页插件深度定制:SQL 改写、多数据库方言适配、COUNT 查询优化、ThreadLocal 参数传递
- 数据脱敏插件:ResultSetHandler/ParameterHandler 拦截、TypeHandler 层面脱敏、敏感字段识别
- SQL 审计日志插件:异步写入、参数脱敏、审计日志数据结构设计、高并发批量写入优化
在 MyBatis 插件开发中,关于插件代理链(Plugin Chain)的执行机制,以下说法正确的是?
在 MyBatis 插件的 Plugin.wrap() 方法中,如果被代理对象已经是代理对象(即已经被前面的插件包装过),则不会再次创建新的代理,而是直接返回原有代理对象。()
在 MyBatis 配置文件 mybatis-config.xml 中按顺序配置了三个插件:
<plugins>
<plugin interceptor="com.example.PluginA"/>
<plugin interceptor="com.example.PluginB"/>
<plugin interceptor="com.example.PluginC"/>
</plugins>
关于这三个插件的执行顺序,以下说法正确的有哪些?
假设 MyBatis 配置了两个插件:PluginX 和 PluginY(按此顺序配置)。当调用被代理的 Executor.query() 方法时,完整的调用链路为:
外部调用 query() -> !!1!!.intercept(invocation) -> invocation.proceed() -> !!2!!.intercept(invocation) -> invocation.proceed() -> 真实的 Executor.query()
请填写空白处的插件名称。
在开发 MyBatis 自定义分页插件时,以下哪种方案是实现分页功能最合理的做法?
请设计一个支持多数据库方言(MySQL、Oracle、PostgreSQL)的分页插件的核心逻辑。要求:
- 说明拦截哪个接口的方法
- 如何处理不同数据库的分页 SQL 语法差异
- 如何同时获取总记录数
- 如何保证分页参数的正确传递
在设计 MyBatis 数据脱敏插件时,以下哪些场景适合通过插件实现敏感数据的自动脱敏处理?
实现手机号脱敏工具方法,规则为:保留前 3 位和后 4 位,中间用 4 个 * 替换。例如 13812345678 脱敏后为 138****5678。
请补全以下代码:
public static String maskPhone(String phone) {
if (phone == null || phone.length() != !!1!!) {
return phone;
}
return phone.substring(0, 3) + "!!2!!" + phone.substring(phone.length() - !!3!!);
}
开发 MyBatis SQL 审计日志插件时,以下哪些做法是正确的?
请设计一个生产级别的 SQL 审计日志插件,要求回答以下问题:
- 应该拦截哪些 MyBatis 接口和方法?为什么?
- 如何在记录 SQL 参数的同时避免日志中打印敏感信息(如密码明文)?
- 审计日志的数据结构应包含哪些核心字段?
- 在高并发场景下,如何保证审计日志的写入性能?
📝 发现内容有误?点击此处直接编辑
长按或扫描二维码,立即体验