一、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整合分析的更多相关文章

  1. Mybatis源码学习第六天(核心流程分析)之Executor分析

    今Executor这个类,Mybatis虽然表面是SqlSession做的增删改查,其实底层统一调用的是Executor这个接口 在这里贴一下Mybatis查询体系结构图 Executor组件分析 E ...

  2. Tomcat8源码笔记(六)连接器Connector分析

    根据 Tomcat8源码笔记(五)组件Container分析 前文分析,StandardService的初始化重心由 StandardEngine转移到了Connector的初始化,本篇记录下Conn ...

  3. 浩哥解析MyBatis源码(六)——DataSource数据源模块之池型数据源

    原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/6675674.html 1 回顾 上一文中解读了MyBatis中非池型数据源的源码,非池型也 ...

  4. mybatis源码学习(四)--springboot整合mybatis原理

    我们接下来说:springboot是如何和mybatis进行整合的 1.首先,springboot中使用mybatis需要用到mybatis-spring-boot-start,可以理解为mybati ...

  5. Mybatis源码学习第六天(核心流程分析)之Executor分析(补充)

    补充上一章没有讲解的三个Executor执行器; 还是贴一下之前的代码吧;我发现其实有些分析注释还是写在代码里面比较好,方便大家理解,之前是我的疏忽,不好意思 @Override public < ...

  6. spring事务源码分析结合mybatis源码(三)

    下面将结合mybatis源码来分析下,这种持久化框架是如何对connection使用,来达到spring事务的控制. 想要在把mybatis跟spring整合都需要这样一个jar包:mybatis-s ...

  7. springboot整合mybatis源码分析

    springboot整合mybatis源码分析 本文主要讲述mybatis在springboot中是如何被加载执行的,由于涉及的内容会比较多,所以这次只会对调用关系及关键代码点进行讲解,为了避免文章太 ...

  8. MyBatis源码分析之环境准备篇

    前言 之前一段时间写了[Spring源码分析]系列的文章,感觉对Spring的原理及使用各方面都掌握了不少,趁热打铁,开始下一个系列的文章[MyBatis源码分析],在[MyBatis源码分析]文章的 ...

  9. 【MyBatis源码分析】环境准备

    前言 之前一段时间写了[Spring源码分析]系列的文章,感觉对Spring的原理及使用各方面都掌握了不少,趁热打铁,开始下一个系列的文章[MyBatis源码分析],在[MyBatis源码分析]文章的 ...

  10. MyBatis 源码分析系列文章导读

    1.本文速览 本篇文章是我为接下来的 MyBatis 源码分析系列文章写的一个导读文章.本篇文章从 MyBatis 是什么(what),为什么要使用(why),以及如何使用(how)等三个角度进行了说 ...

随机推荐

  1. sqlmap --eval 用法

    今天查资料发现 sqlmap 有一个 --eval 的参数 --eval=EVALCODE Evaluate provided Python code before the request (e.g. ...

  2. go实现堆排序、快速排序、桶排序算法

    一. 堆排序 堆排序是利用堆这种数据结构而设计的一种排序算法.以大堆为例利用堆顶记录的是最大关键字这一特性,每一轮取堆顶元素放入有序区,就类似选择排序每一轮选择一个最大值放入有序区,可以把堆排序看成是 ...

  3. 远程桌面连接(mstsc)全攻略

    打算从今天开始,写一写我经常用的,有长时间使用经验的东西,与大家分享,就从mstsc开始吧! mstsc应该是在Windows中,除了calc.cmd.notepad.mspaint,我使用率最高的系 ...

  4. tcpdump使用手册

    tcp使用手册 格式: tcpdump [选项] [过滤条件] 选项: -i eth0 #网卡接口 -A #以ASCII码格式阅读 -w file #下载抓取的数据包 -r file #上传数据包 - ...

  5. C# windows服务知识集锦

    最近公司项目,本人也是刚接触windows服务,现在把这两天上网学习的一些资料拿出来与大家分享. 1).关于windows服务安装包的制作和自动启动服务 http://blog.csdn.net/re ...

  6. 跨 Docker 宿主机 macvlan 类型

    跨 Docker 宿主机 macvlan 类型 前言 a. 本文主要为 Docker的视频教程 笔记. b. 环境为 三台 CentOS 7.0 虚拟机 (Vmware Workstation 15 ...

  7. 关于 CLAHE 的理解及实现

    CLAHE CLAHE 是一种非常有效的直方图均衡算法, 目前网上已经有很多文章进行了说明, 这里说一下自己的理解. CLAHE是怎么来的 直方图均衡是一种简单快速的图像增强方法, 其原理和实现过程以 ...

  8. Linux下Nodejs安装(完整详细)转

    Linux下安装有两种方式,一个是下载源码make编译安装. 另外一种是比较推荐的,直接下载编译好的二进制,官方比较推荐后者. //Linux 64bit version wget --no-chec ...

  9. Nacos注册中心和配置中心流程原理

    一.Nacos注册中心 1.服务启动后---->服务注册原理 springCloud集成Nacos实现原理: 服务启动时,在spring-cloud-commons包下 spring.facto ...

  10. Selenium多浏览器处理 (Chrome/Firefox/IE)

    测试用例文件:test_selenium/test_hogwarts.py 使用pytest框架 定义一个变量,通过外部传入变量,确定使用哪个浏览器 browser = os.getenv(" ...