`
projecttian
  • 浏览: 32607 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

mybatis源码解析之mapper接口代理

阅读更多

刚接触mybatis,个人觉得mybatis唯一的好处就是可以用xml mapper 的方式来代理生成dao类,我们不再需要写dao,取而代之的是在xml文件中写我们的sql语句就可以。这样的话,如果需要修改dao中的查询我们只需要把xml文件修改一下,不用去重新编译class文件。

首先说一下需要考虑一个问题,它是如何实现只写接口类,貌似用xml文件来做接口类的实现的呢?
mybatis对mapper的实现就是默认使用了jdk代理的方式来实现。

                //注册器
MapperRegistry registry = new MapperRegistry();
//注册接口类UserMapper
registry.addMapper(UserMapper.class);
//注册接口类LogMapper
registry.addMapper(LogMapper.class);
//从注册器中获取接口UserMapper代理
UserMapper usermapper = registry.getMapper(UserMapper.class,null);
usermapper.show();
//从注册器中获取接口LogMapper代理
LogMapper logmapper = registry.getMapper(LogMapper.class,null);
logmapper.logShow();

这个我自己做了一个测试,mybatis内部也是相同的实现。
声明一个注册器(registry)注册器注册需要代理的接口,获取接口的代理类,代理类调用方法。

核心的地方就在获取接口代理类,他是如何把xml文件转换成对应接口的代理对象就在这里实现。我们来看看代码:

在mybatis org.apache.ibatis.binding包下面包含了mapper的核心类:
BindingException  binding 自定义异常
MapperMethod mapper代理方法调用
MapperProxy mapper代理对象
MapperProxyFactory mapper工厂
mapperRegistry mapper注册器







稍后继续。。。。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics