您的位置:首页 > 编程语言 > Java开发

mybatis-spring如何做到接口编程的

2014-11-05 16:21 155 查看
What is MyBatis-Spring Not Spring-Mybatis?官方介绍

        第二版那样,Spring 3.0 也仅支持 iBatis2。那么,我们就想将 MyBatis3 的支持添加 到 Spring3.0(参考 Spring Jira 中的问题)中。而不幸的是,Spring
3.0 的开发在 MyBatis 3.0 官方发布前就结束了。 因为 Spring 开发团队不想发布一个基于非发布版的 MyBatis 的整合支 持,那么 Spring 官方的支持就不得不继续等待了。要在 Spring 中支持 MyBatis,MyBatis 社 区认为现在应该是自己团结贡献者和有兴趣的人一起来开始将 Spring 的整合作为 MyBatis 社 区的子项目的时候了

一.spring 的配置

注入映射器有两种方法

1.每个都搞一个,这个比较坑,可以选择忽略



2.配置路径然后全局扫描



上面那个虽然不容,但是可以告诉我们他是如何做的

二.注册

我们来看MapperScannerConfiguer,主要就是doScan



这个里面其实还是用了MapperFactoryBean



他把每个接口,用MapperFactoryBean 生成代理之后注册到spring

而MapperFactoryBean 是如何做的呢

MapperFactoryBean.getObject()---->SqlSessionTemplate.getMapper()--->Configuration.getMapper()

-----MapperRegistry.getMapper()----->MapperProxyFactory.newInstance()

经过了几层之后总算到了代理实现类 返回了我们的接口代理类MapperProxy计算注册完成了

3.执行

执行肯定是从MapperProxy.invoke方法开始.



然后mybatis根据xml配置文件或者方法的注解,的类型,这类涉及一个十分重要的类MapperMethod



这里mybatis就根据不同的返回类型,已经配置的不同类型,执行SqlSessionTemplate不同的方法

SqlSessionTemplate 再最后调用下执行方法然后就ok了,但是这里SqlSessionInterceptor拦截这个请求,然后统一处理了下



就这样,我们的接口编程就完成

这个原理倒是很简单,只不过,当初自己只是从mybatis-spring入手,看了需求没有发现如何实现,后来断点才观察到了整个过程,

希望给大家理解下吧
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ibatis spring 源码