本文共 1606 字,大约阅读时间需要 5 分钟。
Mapper 接口在 MyBatis 3.x 中的工作流程与其注册和调用逻辑紧密相关。以下将详细讲解 Mapper 接口的动态代理注册过程及使用场景。
1. Mapper 接口的动态代理注册
当 Mapper 接口被注册到 MapperRegistry 时,会执行以下步骤:
MapperProxyFactory
包装该 Mapper 接口,存入 knownMappers
映射表。// 注册 Mapper 接口为代理knownMappers.put(type, new MapperProxyFactory(type));
MapperAnnotationBuilder
对 Mapper 接口上的注解进行解析,生成相应的 SQL 执行逻辑(即MappedStatement)。需要注意的是,注解解析依赖于配置对象(configuration)和当前的 Mapper 接口类型。// 解析注解MapperAnnotationBuilder parser = new MapperAnnotationBuilder(config, type);parser.parse();
注:以上逻辑通常通过 MapperRegistry 的 addMapper
方法进行实现。
2. 获取 Mapper 接口的动态代理对象
在需要使用 Mapper 接口时,执行以下步骤:
getMapper
方法,传入 Mapper 接口类型和提供的 SqlSession
对象。public T getMapper(Classtype, 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(...); }}
mapperProxyFactory.newInstance(sqlSession)
获取 Mapper 代理实例,然后调用其方法执行对应的 SQL 操作。流程总结
addMapper
或类似的方法,将 Mapper 接口及其注解解析,注册到 MapperRegistry 中。getMapper
方法获取动态代理实例,调用其方法执行相应的 SQL 操作。以上流程能够高效地将 Mapper 接口与数据库核心配置(如 SqlSession
) 进行交互,最终实现对-real SQL 语句的执行。
以上解析涵盖了 Mapper 工作流程的主要逻辑,包含注册和使用两大主要阶段。技术细节如注解解析、动态代理机制等均可根据实际需求进一步优化。
转载地址:http://kwoxz.baihongyu.com/