全部学科
NodeJS全栈
nodejs
Python全栈
python
小程序首页
📝 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 插件机制中,@Intercepts 注解用于声明插件需要拦截的目标对象和方法。以下哪个对象不属于 MyBatis 插件可拦截的四大核心对象?

A

Executor(执行器)

B

ParameterHandler(参数处理器)

C

TransactionManager(事务管理器)

D

StatementHandler(语句处理器)

2
单选题

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

A

CGLIB 字节码增强

B

JDK 动态代理

C

ASM 字节码操作

D

反射直接调用

3
判断题

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

A

B

4
单选题

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

A

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

B

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

C

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

D

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

5
多选题

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

A

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

B

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

C

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

D

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

6
填空题

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 ________________________2_!!"。请填写空白处的内容。

7
单选题

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

A

自动为慢 SQL 添加索引建议

B

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

C

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

D

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

8
判断题

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

A

B

9
多选题

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

A

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

B

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

C

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

D

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

10
简答题

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

← 上一个专题 插件开发高级应用专题
下一个专题 → 日志配置与调试专题

📝 发现内容有误?点击此处直接编辑

想查看更多习题和详细解析?
小程序提供完整的题库和详细解析

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库