MyBatis源码分析(六):Spring整合分析
一、Mybatis-Spring源码结构

二、Myabtis交给Spring管理的组件
1. dataSource 数据源
配置一个数据源,只要是实现了javax.sql.DataSource接口就可以,可以使任意第三方数据源
1 <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
2 <property name="driverClassName">
3 <value>com.mysql.jdbc.Driver</value>
4 </property>
5 <property name="url">
6 <value>jdbc:mysql://localhost:3306:/mybatis?zeroDateTimeBehavior=convertToNull</value>
7 </property>
8 <property name="username">
9 <value>root</value>
10 </property>
11 <property name="password">
12 <value>root</value>
13 </property>
14 </bean>
2. sqlSessionFactory 生成sqlSession的工厂
给出两个参数,一个是dataSource数据源,另一个是和Mybatis配置文件路径,classpath说明它在.class文件里面。这样Spring初始化IOC容器时区初始化SqlSessionFactoryBean,它是通过解析Myabtis配置文件得到Myabtis运行所需要的上下文。
1 <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
2 <property name=dataSource" ref="dataSource" />
3 <property name=configLocation" value="classpath:sqlMapConfig.xml" />
4 </bean>
3. sqlSessionTemplate 调用sqlSession的模板类
SqlSessionTemplate是Mybatis-Spring的一个核心类。可以通过SqlSessionFactory作为参数,另一个是SqlSessionFactory和执行器类型作为参数。
<bean id="sqlSessionTemplate" calss="org.mybatis.spring.SqlSessionTemplate">
<construct-arg index="0" ref="sqlSessionFactory"/>
</bean>
或者
1 <bean id="sqlSessionTemplate" calss="org.mybatis.spring.SqlSessionTemplate">
2 <construct-arg index="0" ref="sqlSessionFactory" />
3 <construct-arg name="1" value="BATCH" />
4 </bean>
这就意味着Spring会把之前配置好的SqlSessionFactory设置到SqlSessionTemplate中,同时使用SqlSessionTemplate和SqlSessionFactory,系统会用SqlSessionTemplate覆盖掉另外一个。它的效果等同SqlSession对象。
4. mapper 映射器
Mapper只是一个接口,而不是一个实现类,是由Myabtis动态代理的形式生成代理对象去运行的,Spring也没有办法为其生成实现类。MapperFactoryBean类作为中介,通过配置实现为我们所想要的Mapper,它有三个参数MapperInterface 定制接口、SqlSessionFactory SqlSessionTemplate属性没有被配置时设置,SqlSessionTemplate 设置后SqlSessionFactory作废。这个效果等同于SqlSession.getMapper(UserDao.class)
1 <bean id="userDao" calss="org.mybatis.spring.mapper.MapperFactoryBean">
2 <property name="mapperInterface" value="org.wusf.dds.model.mapper" />
3 <property name="sqlSessionTemplate" ref="sqlSessionTemplate" />
4 <!-- 如果同时注入SqlSessionTemplate和SqlSessionFactory,只启用SqlSessionTemplate -->
5 </bean>
MapperScannerConfigurer 配置自动扫描信息。basePackage,指定让Spring自动扫描什么包,会逐层深入扫描;annotationClass,表示类被这个注解标识后被扫描;sqlSessionFactoryBeanName,指定Spring中定义sqlSessionFactory的bean名称,被定义后sqlSessionFactory不起作用;sqlSessionTemplateBeanName,指定Spring中定义sqlSessionTemplate的bean名称,被定义后sqlSessionFactory不起作用;markerInterface,指定实现了什么接口就认为他是Mapper。
1 <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
2 <property name="basePackage" value="org.wusf.dds.model.mapper" />
3 <property name="sqlSessionTemplateBeanName" value="sqlSessionTemplate" />
4 <property name="annotationClass" value="org.springframework.stereotype.Repository" />
5 </bean>
5. transactionManager 事务管理器
Myabtis和Spring结合后是使用Spring AOP去管理事务的,分为 声明式事务(比较方便,大部分场景下适用,主流) 和 编程式事务 两种
配置配置Spring声明式事务
1 <bean id="txManager" class="org.springframework.jdbc.dataSource.DataSourceTransactionManager">
2 <property name="dataSource" ref="dataSource" />
3 </bean>
4 <!-- 使用声明式事务管理方式(注解) -->
5 <tx:annotation-driven transation-manager="txManager" />
业务层是处理业务的地方,也是处理数据库事务的地方。Spring配置业务层,使用@Service表示哪个类是业务层的类,也可以同自动扫描的方法读取Service对象到Spring上下文中
1 <context:component-scans base-package="org" use-default-filters="false">
2 <context:include-filter type="annotation" expression="org.springframework.stereotype.Service" />
3 </context:component-scan>
MyBatis源码分析(六):Spring整合分析的更多相关文章
- Mybatis源码学习第六天(核心流程分析)之Executor分析
今Executor这个类,Mybatis虽然表面是SqlSession做的增删改查,其实底层统一调用的是Executor这个接口 在这里贴一下Mybatis查询体系结构图 Executor组件分析 E ...
- Tomcat8源码笔记(六)连接器Connector分析
根据 Tomcat8源码笔记(五)组件Container分析 前文分析,StandardService的初始化重心由 StandardEngine转移到了Connector的初始化,本篇记录下Conn ...
- 浩哥解析MyBatis源码(六)——DataSource数据源模块之池型数据源
原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/6675674.html 1 回顾 上一文中解读了MyBatis中非池型数据源的源码,非池型也 ...
- mybatis源码学习(四)--springboot整合mybatis原理
我们接下来说:springboot是如何和mybatis进行整合的 1.首先,springboot中使用mybatis需要用到mybatis-spring-boot-start,可以理解为mybati ...
- Mybatis源码学习第六天(核心流程分析)之Executor分析(补充)
补充上一章没有讲解的三个Executor执行器; 还是贴一下之前的代码吧;我发现其实有些分析注释还是写在代码里面比较好,方便大家理解,之前是我的疏忽,不好意思 @Override public < ...
- spring事务源码分析结合mybatis源码(三)
下面将结合mybatis源码来分析下,这种持久化框架是如何对connection使用,来达到spring事务的控制. 想要在把mybatis跟spring整合都需要这样一个jar包:mybatis-s ...
- springboot整合mybatis源码分析
springboot整合mybatis源码分析 本文主要讲述mybatis在springboot中是如何被加载执行的,由于涉及的内容会比较多,所以这次只会对调用关系及关键代码点进行讲解,为了避免文章太 ...
- MyBatis源码分析之环境准备篇
前言 之前一段时间写了[Spring源码分析]系列的文章,感觉对Spring的原理及使用各方面都掌握了不少,趁热打铁,开始下一个系列的文章[MyBatis源码分析],在[MyBatis源码分析]文章的 ...
- 【MyBatis源码分析】环境准备
前言 之前一段时间写了[Spring源码分析]系列的文章,感觉对Spring的原理及使用各方面都掌握了不少,趁热打铁,开始下一个系列的文章[MyBatis源码分析],在[MyBatis源码分析]文章的 ...
- MyBatis 源码分析系列文章导读
1.本文速览 本篇文章是我为接下来的 MyBatis 源码分析系列文章写的一个导读文章.本篇文章从 MyBatis 是什么(what),为什么要使用(why),以及如何使用(how)等三个角度进行了说 ...
随机推荐
- ByteArrayOutputStream小测试
import java.io.*; import org.junit.Test; public class ByteArrayOutputStreamTest { @Test public void ...
- 使用私有gitlab发布自动生成版本号和标签(version和tag)(骚)
设置 semantic ,自动生成版本号和标签 FROM node:14-buster-slim LABEL maintainer="wangyunpeng" COPY sourc ...
- 升级到windows10之后的骚操作,安装debian,centos7,支持linux、docker、kubectl命令
修改Windows10默认字体和图标很大 打开Hyper-V Windows10下载Docker Desktop https://www.docker.com/products/docker-desk ...
- leetcode-H2O生成(多线程)
现在有两种线程,氧 oxygen 和氢 hydrogen,你的目标是组织这两种线程来产生水分子. 存在一个屏障(barrier)使得每个线程必须等候直到一个完整水分子能够被产生出来. 氢和氧线程会被分 ...
- CodeForce-807C Success Rate(二分数学)
Success Rate CodeForces - 807C 给你4个数字 x y p q ,要求让你求最小的非负整数b,使得 (x+a)/(y+b)==p/q,同时a为一个整数且0<=a< ...
- 一起学习PHP的runkit扩展如何使用
这次又为大家带来一个好玩的扩展.我们知道,在 PHP 运行的时候,也就是部署完成后,我们是不能修改常量的值,也不能修改方法体内部的实现的.也就是说,我们编码完成后,将代码上传到服务器,这时候,我们想在 ...
- Linux系列(39) - nohup
nohup 英文全称 no hang up(不挂起),用于在系统后台不挂断地运行命令,退出终端不会影响程序的运行. nohup 命令,在默认情况下(非重定向时),会输出一个名叫 nohup.out 的 ...
- jenkins的目录介绍
jenkins的目录介绍: /etc/init.d/jenkins #jenkins的启动文件 /etc/logrotate.d/jenkins /etc/sysconf ...
- php CURL 发送http请求 GET POST
* CURL http://www.php.net/manual/en/book.curl.php http://jp2.php.net/manual/en/function.curl-setopt. ...
- 鸿蒙内核源码分析(信号量篇) | 谁在负责解决任务的同步 | 百篇博客分析OpenHarmony源码 | v29.01
百篇博客系列篇.本篇为: v29.xx 鸿蒙内核源码分析(信号量篇) | 谁在负责解决任务的同步 | 51.c.h .o 进程通讯相关篇为: v26.xx 鸿蒙内核源码分析(自旋锁篇) | 自旋锁当立 ...