全部学科
NodeJS全栈
nodejs
Python全栈
python
小程序首页
📝 1 篇文章 9 道配套习题

接口绑定与动态代理专题

专题说明

本专题讲解 MyBatis 最核心的特性之一——Mapper 接口绑定与动态代理机制。通过本专题,你将理解为什么只需定义接口而无需编写实现类,MyBatis 就能执行 SQL 并返回结果。

学习目标

  1. 理解 MyBatis 接口绑定的核心原理
  2. 掌握 JDK 动态代理在 MyBatis 中的应用
  3. 理解 Mapper 接口方法名与 XML 中 SQL id 的对应关系
  4. 掌握 getMapper 方法的底层调用链
  5. 能够排查接口绑定失败的常见问题

学习内容

本专题涵盖以下知识点:

  • 接口绑定原理:为什么只需要接口
  • JDK 动态代理 + XML 解析的绑定机制
  • Mapper 接口与 XML 的对应规则
  • SqlSession.getMapper() 的底层实现
  • MapperRegistry、MapperProxyFactory、MapperMethod 的作用
  • 接口绑定的常见错误与排查

学习建议

  1. 先理解"为什么不需要编写实现类",这是理解动态代理的前提
  2. 重点理解 namespace + id 如何对应到接口方法
  3. getMapper 的调用链是进阶知识,理解后可以更好地排查问题

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

📝 配套习题(9 题)

1
单选题

MyBatis 实现 Mapper 接口与 XML 映射文件绑定的核心机制是什么?

A

编译时注解处理

B

JDK 动态代理 + XML 解析

C

CGLIB 字节码增强

D

AOP 切面拦截

2
多选题

关于 MyBatis 接口绑定原理,以下哪些描述是正确的?

A

XML 映射文件的 namespace 必须与 Mapper 接口的全限定类名一致

B

XML 中 SQL 语句的 id 必须与接口方法名一致

C

接口方法可以有多个重载方法

D

MyBatis 在初始化时会解析 XML 并将映射信息注册到 Configuration 对象中

3
填空题

MyBatis 为 Mapper 接口创建的动态代理对象的核心类是___________,该代理类实现了_________________接口,在 invoke 方法中通过____________来执行 SQL 语句。

4
单选题

关于 MyBatis 中 Mapper 接口的定义,以下说法正确的是?

A

Mapper 接口必须编写实现类来完成数据库操作

B

Mapper 接口方法的参数必须与 XML 中 parameterType 完全一致

C

Mapper 接口可以继承其他接口,继承的方法也会被 MyBatis 识别

D

Mapper 接口方法只能返回实体对象,不能返回 Map 或基本类型

5
多选题

以下关于 Mapper 接口定义方式,哪些是正确的?

A

可以使用 @Select、@Insert 等注解直接在接口方法上编写 SQL

B

使用注解编写 SQL 时,仍然需要编写 XML 映射文件

C

同一个接口可以部分方法使用注解、部分方法使用 XML 映射

D

注解方式编写的 SQL 不能使用动态 SQL 功能

6
判断题

Mapper 接口方法的返回值类型必须与 XML 映射文件中对应 SQL 的 resultType 属性指定的类型完全一致,否则 MyBatis 会抛出异常。

A

B

7
单选题

以下代码中,userMapper 对象的实际类型是什么?

Java
SqlSession session = sqlSessionFactory.openSession();
UserMapper userMapper = session.getMapper(UserMapper.class);
A

UserMapper 接口的实现类实例

B

JDK 动态代理对象,类型为 com.sun.proxy.$ProxyX

C

MyBatis 内部生成的 UserMapperImpl 类实例

D

CGLIB 生成的代理对象

8
多选题

关于通过 SqlSession.getMapper() 获取并使用 Mapper,以下哪些说法是正确的?

A

每次调用 getMapper() 都会创建一个新的代理对象实例

B

getMapper() 返回的代理对象方法调用后,不需要手动提交事务,默认自动提交

C

使用完 Mapper 后,应该关闭其关联的 SqlSession 以释放数据库连接

D

同一个 SqlSession 多次调用 getMapper() 返回的是同一个代理实例

9
填空题

调用 session.getMapper(UserMapper.class) 时,SqlSession 内部会通过______________查找已注册的接口,然后通过__________________工厂类创建动态代理对象,最终返回的代理对象在方法调用时会委托给____________执行 SQL 逻辑。

← 上一个专题 批量操作与性能优化专题
下一个专题 → 插件开发高级应用专题

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

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

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

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