MyBatis源码分析之——获得Mapper对象-阿里云开发者社区

开发者社区> -技术小助手-> 正文

MyBatis源码分析之——获得Mapper对象

简介: MyBatis源码分析之——获得Mapper对象
+关注继续查看
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);



public <T> T getMapper(Class<T> type) {
    return configuration.getMapper(type, this);


mapperRegistry.getMapper是从MapperRegistry的knownMappers里面取的,knownMappers里面存的是接口类型(interface mapper.UserMapper)和工厂类(MapperProxyFactory)。



public <T> T getMapper(Class<T> type, SqlSession sqlSession) {
    return mapperRegistry.getMapper(type, sqlSession);
}


从knownMappers的Map里根据接口类型(interface mapper.UserMapper)取出对应的工厂类



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);
  }
}
public T newInstance(SqlSession sqlSession) {
  final MapperProxy<T> mapperProxy = new MapperProxy<>(sqlSession, mapperInterface, methodCache);
  return newInstance(mapperProxy);
}


这里通过JDK动态代理返回代理对象MapperProxy。



protected T newInstance(MapperProxy<T> mapperProxy) {
  //mapperInterface是interface mapper.UserMapper
  return (T) Proxy.newProxyInstance(mapperInterface.getClassLoader(), new Class[] { mapperInterface }, mapperProxy);
}

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Apache APISIX 助力有赞云原生 PaaS 平台,实现全面微服务治理(3)
Apache APISIX 助力有赞云原生 PaaS 平台,实现全面微服务治理(3)
6 0
Netty执行流程
Netty执行流程
9 0
万字长文:云原生底座之营造法式 | 平台供应商视角-第一部分(1)
万字长文:云原生底座之营造法式 | 平台供应商视角-第一部分(1)
6 0
真实如刀的洞见:和扶墙老师聊技术、组织和商业
真实如刀的洞见:和扶墙老师聊技术、组织和商业
4 0
万字长文:云原生底座之营造法式 | 平台供应商视角-第一部分(3)
万字长文:云原生底座之营造法式 | 平台供应商视角-第一部分(3)
8 0
Netty 高效的Reactor线程模型
Netty 高效的Reactor线程模型
5 0
自学Java的个人建议
个人建议,欢迎交流。
7 0
Apache RocketMQ 4.9.1 高性能优化之路(上)
Apache RocketMQ 4.9.1 高性能优化之路(上)
7 0
1633
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载