欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

mybatis源码解析之mapper接口代理 博客分类: mybatis mybatis 

程序员文章站 2024-03-14 08:34:10
...

刚接触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注册器







稍后继续。。。。
相关标签: mybatis