Spring整合mybatis
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相关推荐
- spring整合mybatis(入门级简单教程1)--在spring中配置c3p0,并成功测试
引子:spring整合mybatis.因为,我们看完(我就是这样的)spring和mybatis之后,本想自己写一个小小的项目,以便加深理解,但是我发现在spring中整合mybatis并不是一件容易 ...
- Spring学习笔记:Spring整合Mybatis(mybatis-spring.jar)(二:mybatis整合spring)
http://blog.csdn.net/qq598535550/article/details/51703190 二.Spring整合mybatis其实是在mybatis的基础上实现Spring框架 ...
- SSM之二(Spring整合Mybatis)
项目与外界交互大概过程如下图: 一般过程是: 前端发送请求,查询数据.增加数据.修改数据.删除数据 中间件经过处理后,对数据发送请求 数据库返回数据,中间件再对数据处理 中间件响应前端请求 上一节关注 ...
- Spring整合Mybatis之注解方式,(注解整合Junit)
Spring整合Mybatis之注解方式 我有一篇博客详细写了我自己使用xml的方法Spring整合MyBatis,现在我就把核心配置文件中的每个bean的配置使用注解的方式实现 注解整合MyBati ...
- spring整合mybatis基于注解
数据库 /* Navicat MySQL Data Transfer Source Server : mysql Source Server Version : 50549 Sourc ...
- spring整合mybatis基于xml配置
数据库 /* Navicat MySQL Data Transfer Source Server : mysql Source Server Version : 50549 Sourc ...
- spring 整合 mybatis 中数据源的几种配置方式
因为spring 整合mybatis的过程中, 有好几种整合方式,尤其是数据源那块,经常看到不一样的配置方式,总感觉有点乱,所以今天有空总结下. 一.采用org.mybatis.spring.mapp ...
- Spring整合mybatis中的sqlSession是如何做到线程隔离的?
转载自 Spring整合mybatis中的sqlSession是如何做到线程隔离的? 项目中常常使用mybatis配合spring进行数据库操作,但是我们知道,数据的操作是要求做到线程安全的,而且按 ...
- Spring整合Mybatis和JUnit
Spring整合Mybatis: 注解整合MyBatis分析 业务类使用注解形式声明bean,属性采用注解注入 建立独立的配置管理类,分类管理外部资源,根据功能进行分类,并提供对应的方法获取bean ...
- Spring 整合 Mybatis
数据库环境 // 创建mybatis数据库 create database mybatis;use mybatis // 创建teacher表 create table teacher(id int ...
最新文章
- 苏子怡:大数据思维融入建筑节能 | 提升之路系列
- RabbitMQ 把一个queue从一个node转移到另外一个node.
- 字符串的第n个排列的算法
- 无线网卡共享Internet访问到电脑有线接口注意事项
- linux ftp 登录慢,linux中vsftpd登录,上传下载文件慢解决办法linux操作系统 -电脑资料...
- SAP License:SAP精细化的应收付及要素为根设计思想
- /dev/null脚本中作用
- Java中递归复制多级文件夹(IO流)
- 我的世界学园都市java_我的世界学园都市地图
- matlab imagesc jet,matlab imagesc
- 常用的默认端口号(HTTP\HTTPS\FTP)
- 薄荷 (2009-06-07)
- web前端关于浏览器兼容性
- MATLAB图像基本操作(信息查询/文件读取/写入/显示)
- 一种获取NLP语料的基本方法
- 977.有序数组的平方
- 周杰伦的2000w个故事
- WebFlux客户端WebClient
- 计算机读书报告Word,《读书报告模版》word版.doc
- FAT16文件系统之目录项分析(四)