参考答案
实现方式:
- 根据 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—