全部学科
Python全栈
python
NodeJS全栈
nodejs
📝 1 篇文章 10 道配套习题

插件机制专题

专题说明

本专题精选10道代表性题目,系统讲解MyBatis的插件机制,涵盖插件拦截原理(JDK动态代理)、四大核心拦截对象、@Intercepts与@Signature注解、Interceptor接口三方法、PageHelper分页插件原理与实现、自定义插件开发等核心内容,是深入理解MyBatis扩展机制的进阶知识。

学习目标

  1. 理解MyBatis插件底层基于JDK动态代理的拦截机制
  2. 掌握四大核心拦截对象(Executor、ParameterHandler、ResultSetHandler、StatementHandler)
  3. 熟练使用@Intercepts和@Signature注解声明拦截目标
  4. 掌握Interceptor接口中intercept、plugin、setProperties三个方法的作用
  5. 理解PageHelper分页插件的实现原理
  6. 能够开发自定义插件实现SQL改写、性能监控等功能

学习内容

本专题涵盖以下2个知识点:

知识点题目数核心内容
插件原理4题JDK动态代理、四大拦截对象、拦截链、Plugin.wrap
自定义插件6题Interceptor接口、@Intercepts注解、分页插件、SQL改写

学习建议

  • 先阅读完整指南文章,理解插件机制的整体架构
  • 重点理解JDK动态代理在插件中的应用
  • 掌握四大拦截对象各自的作用时机
  • 分页插件是插件的经典应用案例,建议深入理解其ThreadLocal传递参数的设计
  • 尝试实现一个简单的SQL日志或性能监控插件

📝 配套习题(10 题)

💡 参考答案在文末
判断题
1

MyBatis 配置了多个插件时,它们的执行顺序是按照在 mybatis-config.xml 中配置的顺序依次执行的,先配置的插件会先被拦截执行(即先执行外层的 intercept 逻辑)。

A

B

2

MyBatis 性能监控插件(PerformanceInterceptor)适合在生产环境中长期使用,因为它对性能的影响可以忽略不计。

A

B

单选题
3

MyBatis 插件机制中,@Intercepts 注解用于声明插件需要拦截的目标对象和方法。以下哪个对象不属于 MyBatis 插件可拦截的四大核心对象?

A

Executor(执行器)

B

ParameterHandler(参数处理器)

C

TransactionManager(事务管理器)

D

StatementHandler(语句处理器)

4

MyBatis 插件的底层拦截机制基于什么技术实现?

A

CGLIB 字节码增强

B

JDK 动态代理

C

ASM 字节码操作

D

反射直接调用

5

MyBatis 分页插件(如 PageHelper)实现分页的核心原理是什么?

A

在 Mapper 接口方法中手动添加 LIMIT 子句

B

使用 ResultSet 分页,查询全部数据后在内存中截取

C

拦截 Executor 的 query 方法,通过反射修改 BoundSql 中的 SQL 语句,追加 LIMIT 子句

D

拦截 StatementHandler 的 prepare 方法,重新生成带 LIMIT 的 SQL

6

MyBatis 自带的性能监控插件 PerformanceInterceptor(MyBatis 3.x 早期版本)的主要功能是什么?

A

自动为慢 SQL 添加索引建议

B

拦截 Executor 的 update 方法,统计 SQL 执行时间并输出日志

C

拦截 StatementHandler 的 query 和 update 方法,打印 SQL 及其执行时间

D

缓存 SQL 执行计划,提升重复查询性能

多选题
7

关于 PageHelper 分页插件的实现机制,以下说法正确的有哪些?

A

PageHelper 使用 ThreadLocal 存储分页参数(页码、每页条数),确保线程安全

B

PageHelper.startPage() 必须在 Mapper 方法调用之前执行,否则分页不生效

C

PageHelper 会自动对所有 SQL 语句进行分页,无需手动调用 startPage()

D

PageHelper 在执行分页查询前,会先执行一条 COUNT SQL 获取总记录数

8

在 MyBatis 项目中,以下哪些方式可以用于 SQL 性能监控?

A

自定义 Interceptor 拦截 StatementHandler,记录 SQL 执行时间并写入监控系统

B

使用 P6Spy 等第三方 SQL 日志框架,在代理层捕获 SQL 和执行时间

C

依赖 MyBatis 内置的 PerformanceInterceptor 作为生产环境主要监控手段

D

使用 Druid 连接池的 StatFilter,通过其 SQL 统计功能进行性能分析

填空题
9

PageHelper 在重写 SQL 实现分页时,会将原始 SQL 改写为两条:一条是 COUNT 查询,一条是 LIMIT 分页查询。原始 SQL 为 "SELECT u.id, u.name FROM user u WHERE u.age > 18 ORDER BY u.id",改写后的 COUNT SQL 为 "SELECT ____________ FROM user u WHERE u.age > 18",LIMIT SQL 为原始 SQL 追加 "____________"。请填写空白处的内容。

简答题
10

请简述 MyBatis 中实现自定义 Interceptor 需要完成的步骤,并说明 Interceptor 接口中三个方法(intercept、plugin、setProperties)各自的作用。

参考答案
1.正确 2.错误 3.C 4.B 5.C 6.C 7.A;B;D 8.A;B;D 9.COUNT(0);LIMIT ?,? 10.
想在手机上练习这套专题?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码
← 上一个专题 插件开发高级应用专题
下一个专题 → 日志配置与调试专题
扫码体验小程序
加载中
想在手机上刷题学习?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码