[size=medium]
刚接触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注册器
[/size]
稍后继续。。。。
刚接触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注册器
[/size]
稍后继续。。。。
本文深入探讨mybatis中接口代理的实现机制,通过实例展示如何使用xml文件来替代传统的DAO类,以及如何仅通过修改xml文件来调整SQL语句,从而简化数据库操作的维护工作。重点解析了mybatis如何利用JDK代理实现接口的动态绑定,并通过代码实例详细解释了这一过程。
1055

被折叠的 条评论
为什么被折叠?



