spring 整合mybatis,无非主要两点:
1、spring、mybatis中connection整合
2、mapper接口的扫描(得自定义扫描类去扫描接口、因spring扫描类会过滤接口)、生成代理类

一、解决connection整合问题
1、spring整合mybatis基于配置类,需要指定datasource、SqlSessionFatoryBean(可以理解为SqlSessionFactoryBuilder、只不过功能比起更强大)


@Configuration
@ComponentScan(basePackages = "com")
@MapperScan(basePackages = "com.dao")
public class MybatisConfig{@Autowiredprivate MybatisProperties mybatisProperties;@Beanpublic DataSource dataSource(){DruidDataSource dataSource = new DruidDataSource();dataSource.setDriverClassName(mybatisProperties.getDriver());dataSource.setUrl(mybatisProperties.getUrl());dataSource.setUsername(mybatisProperties.getUsername());dataSource.setPassword(mybatisProperties.getPassword());return dataSource;}@Beanpublic SqlSessionFactoryBean sqlSessionFactoryBean(DataSource dataSource) throws IOException {SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();sqlSessionFactoryBean.setDataSource(dataSource);PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();Resource[] resources = resolver.getResources(mybatisProperties.getMapperLocations());sqlSessionFactoryBean.setMapperLocations(resources);sqlSessionFactoryBean.setTypeAliasesPackage(mybatisProperties.getTypeAliasesPackage());return sqlSessionFactoryBean;}
}

datasource作用主要就是获取连接
SqlSessionFactoryBean核心功能点:
1、解析的配置文件封装到Configuration(mybatis核心)
2、指定事物工厂这一步指定spring的事物工厂(主要整合connection)

因其实现InitializiBean接口构建bean的时候会执行其afterPropertiesSet()进行构建SqlSessionFactory

而在buildSqlSessionFactory()方法中会指定事物管理器工厂其内部会创建SpringManagedTransactionFactory

下面就看看SpringManagedTransactionFactory事物管理器获取connection时候从哪里获取的



可以看到connection是从事物管理器中获取的

继续走下去看看从getResource获取什么


而这个resource是个ThreadLocal这其中就是存放connection当业务从加@Transcation时会生成conncetion放到这个threadlocal中,所以拿到是同一个connection

下面验证下这个resource中的connection什么时候放进去的,看下大概

(1)spring开启事物会往connectionholder绑定当前生成的connection,并把connectionholder放到resouce中即ThradLocal中
DataSourceTransactionManager#doBegin方法中会把生成的connectionholder放到resouce中即ThradLocal中

下图可以看到已经绑定到resouce中了即ThreadLocal中、myabtis获取连接就是从这个resource中获取的,记住此时ConnctionHolder的id为16694上图可以看到

下面看下执行到mybatis获取连接时可以看到从resouce中获取,而且ConnctionHolder的id为16694上图可以看到说明spring mybatis中conncetion已经整合

二、spring是怎样把mapper接口生成代理放到容器中的
spring自带的扫描器只能扫描不是抽象类的、非接口的类才能扫描成bean定义
PostProcessorRegistrationDelegate#invokeBeanDefinitionRegistryPostProcessors
postProcessor.postProcessBeanDefinitionRegistry中后置处理器的调用过程回去扫描mapper接口


下面扫描mapper接口封装成bean定义做了个偷天换日设置class为MapperFactoryBean用了创建代理具体创建过程可参考

https://www.cnblogs.com/kjcc/p/14439472.html


下面看看MapperFactoryBean对象、getObject创建代理(实现了FactoryBean接口)、具体创建细节同mybatis

Spring整合mybatis相关推荐

  1. spring整合mybatis(入门级简单教程1)--在spring中配置c3p0,并成功测试

    引子:spring整合mybatis.因为,我们看完(我就是这样的)spring和mybatis之后,本想自己写一个小小的项目,以便加深理解,但是我发现在spring中整合mybatis并不是一件容易 ...

  2. Spring学习笔记:Spring整合Mybatis(mybatis-spring.jar)(二:mybatis整合spring)

    http://blog.csdn.net/qq598535550/article/details/51703190 二.Spring整合mybatis其实是在mybatis的基础上实现Spring框架 ...

  3. SSM之二(Spring整合Mybatis)

    项目与外界交互大概过程如下图: 一般过程是: 前端发送请求,查询数据.增加数据.修改数据.删除数据 中间件经过处理后,对数据发送请求 数据库返回数据,中间件再对数据处理 中间件响应前端请求 上一节关注 ...

  4. Spring整合Mybatis之注解方式,(注解整合Junit)

    Spring整合Mybatis之注解方式 我有一篇博客详细写了我自己使用xml的方法Spring整合MyBatis,现在我就把核心配置文件中的每个bean的配置使用注解的方式实现 注解整合MyBati ...

  5. spring整合mybatis基于注解

    数据库 /* Navicat MySQL Data Transfer Source Server         : mysql Source Server Version : 50549 Sourc ...

  6. spring整合mybatis基于xml配置

    数据库 /* Navicat MySQL Data Transfer Source Server         : mysql Source Server Version : 50549 Sourc ...

  7. spring 整合 mybatis 中数据源的几种配置方式

    因为spring 整合mybatis的过程中, 有好几种整合方式,尤其是数据源那块,经常看到不一样的配置方式,总感觉有点乱,所以今天有空总结下. 一.采用org.mybatis.spring.mapp ...

  8. Spring整合mybatis中的sqlSession是如何做到线程隔离的?

    转载自  Spring整合mybatis中的sqlSession是如何做到线程隔离的? 项目中常常使用mybatis配合spring进行数据库操作,但是我们知道,数据的操作是要求做到线程安全的,而且按 ...

  9. Spring整合Mybatis和JUnit

    Spring整合Mybatis: 注解整合MyBatis分析 业务类使用注解形式声明bean,属性采用注解注入 建立独立的配置管理类,分类管理外部资源,根据功能进行分类,并提供对应的方法获取bean ...

  10. Spring 整合 Mybatis

    数据库环境 // 创建mybatis数据库 create database mybatis;use mybatis // 创建teacher表 create table teacher(id int ...

最新文章

  1. 苏子怡:大数据思维融入建筑节能 | 提升之路系列
  2. RabbitMQ 把一个queue从一个node转移到另外一个node.
  3. 字符串的第n个排列的算法
  4. 无线网卡共享Internet访问到电脑有线接口注意事项
  5. linux ftp 登录慢,linux中vsftpd登录,上传下载文件慢解决办法linux操作系统 -电脑资料...
  6. SAP License:SAP精细化的应收付及要素为根设计思想
  7. /dev/null脚本中作用
  8. Java中递归复制多级文件夹(IO流)
  9. 我的世界学园都市java_我的世界学园都市地图
  10. matlab imagesc jet,matlab imagesc
  11. 常用的默认端口号(HTTP\HTTPS\FTP)
  12. 薄荷 (2009-06-07)
  13. web前端关于浏览器兼容性
  14. MATLAB图像基本操作(信息查询/文件读取/写入/显示)
  15. 一种获取NLP语料的基本方法
  16. 977.有序数组的平方
  17. 周杰伦的2000w个故事
  18. WebFlux客户端WebClient
  19. 计算机读书报告Word,《读书报告模版》word版.doc
  20. FAT16文件系统之目录项分析(四)

热门文章

  1. Linux命令学习手册-iconv命令
  2. 远程连接Linux系统
  3. 完整版商城PHP源码小程序,前后端+后台+小程序;访问地址在文末
  4. 用程序C语言设计名片,C语言程序设计求职简历模板
  5. UI设计开发工具介绍
  6. idea2017+kemulator搭建J2ME开发环境
  7. 服务器2008系统驱动3008驱动,sas3008驱动
  8. windows下 robocopy命令
  9. 性能调优第一篇-SQL格式化
  10. c语言必背100代码,初学者代码大全(c语言必背100代码)