Mapper 接口方法如何与注解里的 SQL 进行绑定的

参考答案

实现方式:

  • 根据 Mapper 接口、其方法、方法上的注解,生成 mappedStatementId 与 MapperStatement,注册到 configuration 对象中。
  • 根据 Mapper 接口方法查到并调用对应的 MappedStatement,执行 SQL。

详解:

解析生成注册 MapperStatement 的代码入口在 MapperRegistry addMapper 方法。

//使用 MapperProxyFactory 包装 Mapper 接口 Class 对象
knownMappers.put(type, new MapperProxyFactory<>(type));

//解析 Mapper 接口方法上的注解,生成对应的 MapperStatement
MapperAnnotationBuilder parser = new MapperAnnotationBuilder(config, type);
parser.parse();

获取 Mapper 接口的动态代理对象的代码入口在 MapperRegistry getMapper 方法。

public <T> T getMapper(Class<T> type, SqlSession sqlSession) {
    final MapperProxyFactory<T> mapperProxyFactory = (MapperProxyFactory<T>) knownMappers.get(type);
    if (mapperProxyFactory == null) {
        throw new BindingException("Type " + type + " is not known to the MapperRegistry.");
    }
    try {
        return mapperProxyFactory.newInstance(sqlSession);
    } catch (Exception e) {
        throw new BindingException("Error getting mapper instance. Cause: " + e, e);
    }
}

 

以上,是MyBatis面试题【Mapper接口方法如何与注解里的SQL进行绑定的】的参考答案。

输出,是最好的学习方法

欢迎在评论区留下你的问题、笔记或知识点补充~

—end—

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧