博客
关于我
Mapper 接口方法如何与注解里的 SQL 进行绑定的?
阅读量:597 次
发布时间:2019-03-12

本文共 1606 字,大约阅读时间需要 5 分钟。


Mapper 接口在 MyBatis 3.x 中的工作流程与其注册和调用逻辑紧密相关。以下将详细讲解 Mapper 接口的动态代理注册过程及使用场景。

1. Mapper 接口的动态代理注册

当 Mapper 接口被注册到 MapperRegistry 时,会执行以下步骤:

  • Using Mapper 接口作为 Class 类型:首先需要确保已知 Mapper 接口的所有类型已注册到 MapperRegistry。使用 MapperProxyFactory 包装该 Mapper 接口,存入 knownMappers 映射表。
// 注册 Mapper 接口为代理knownMappers.put(type, new MapperProxyFactory(type));
  • 解析 Mapper 方法注解:使用 MapperAnnotationBuilder 对 Mapper 接口上的注解进行解析,生成相应的 SQL 执行逻辑(即MappedStatement)。需要注意的是,注解解析依赖于配置对象(configuration)和当前的 Mapper 接口类型。
// 解析注解MapperAnnotationBuilder parser = new MapperAnnotationBuilder(config, type);parser.parse();
  • 注册 MapperStatement 到 Configuration 对象:解析后的 SQL 语句会被注册到 Configuration 对象中,准备用于后续的 SQL 执行操作。

注:以上逻辑通常通过 MapperRegistry 的 addMapper 方法进行实现。


2. 获取 Mapper 接口的动态代理对象

在需要使用 Mapper 接口时,执行以下步骤:

  • 通过 MapperRegistry 获取映射工厂:使用 getMapper 方法,传入 Mapper 接口类型和提供的 SqlSession 对象。
public T getMapper(Class
type, SqlSession sqlSession) { // 获取已注册的 MapperProxyFactory 实例 MapperProxyFactory mapperProxyFactory = knownMappers.get(type); if (mapperProxyFactory == null) { throw new BindingException(...); } try { return mapperProxyFactory.newInstance(sqlSession); } catch (Exception e) { throw new BindingException(...); }}
  • 创建 MappeedStatement 实例并执行 SQL:通过 mapperProxyFactory.newInstance(sqlSession) 获取 Mapper 代理实例,然后调用其方法执行对应的 SQL 操作。

流程总结

  • 注册阶段:通过 addMapper 或类似的方法,将 Mapper 接口及其注解解析,注册到 MapperRegistry 中。
  • 使用阶段:通过 getMapper 方法获取动态代理实例,调用其方法执行相应的 SQL 操作。

以上流程能够高效地将 Mapper 接口与数据库核心配置(如 SqlSession) 进行交互,最终实现对-real SQL 语句的执行。


以上解析涵盖了 Mapper 工作流程的主要逻辑,包含注册和使用两大主要阶段。技术细节如注解解析、动态代理机制等均可根据实际需求进一步优化。

转载地址:http://kwoxz.baihongyu.com/

你可能感兴趣的文章
Linux kernel pwn --- CSAW2015 StringIPC
查看>>
2020 05 02 记录思考
查看>>
2020-05-31 py执行时超时控制
查看>>
一段强大的shellcode
查看>>
双链表相加问题
查看>>
GB2312-80 汉字机内码
查看>>
n的a进制数
查看>>
配置jdk的环境变量
查看>>
echo命令的颜色及同行显示控制
查看>>
CentOS7利用Systemd添加用户自定义系统服务
查看>>
懒人HTML5笔记-1
查看>>
两台服务器http方式共享yum软件仓库
查看>>
团队背包(team)
查看>>
spring tx:advice 和 aop:config 配置事务
查看>>
修改layui的后台模板的左侧导航栏可以伸缩
查看>>
ThreadLocal源码分析解密
查看>>
编译android源代码(aosp)
查看>>
Java流程控制语句
查看>>
wincc实现手机APP远程监控
查看>>
pandas DataFrame进行条件选取数据时出现SettingWithCopyWarning的解决方法
查看>>