文档章节

MyBatis整合Spring的实现(1)

tara_qri
 tara_qri
发布于 2015/10/24 16:52
字数 632
阅读 350
收藏 13

目的

    MyBatis是一个基于Java的持久层框架。也是很多程序员的最爱,因为自己控制的SQL时,写出一个好的SQL会大大的提高整体程序的性能。目前的项目一般都是MyBatis和Spring的整合,那么具体的逻辑是什么样子呢?下面就来分析一下具体的代码及逻辑。

分析

1 Spring的XML配置(样例):

对于上面XML的配置信息,也就是Spring对一个类进行了实例化。那我们就来看看SqlSeesionFactoryBean类到底做了什么操作呢?

2 SqlSeesionFactoryBean属性:

  /** 日志类 */
  private final Log logger = LogFactory.getLog(getClass());
  /** mybatis的全局配置信息 */
  private Resource configLocation;
  /** mybatis的SQL文件信息 */
  private Resource[] mapperLocations;
  /** 数据源 */
  private DataSource dataSource;
  /** 事务工厂 */
  private TransactionFactory transactionFactory;
  /** spring配置文件中mybatis的属性 */
  private Properties configurationProperties;
  /** SqlSessionFactoryBuilder  */
  private SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
  /** mybatis的SqlSessionFactory工厂  */
  private SqlSessionFactory sqlSessionFactory;
  private String environment = SqlSessionFactoryBean.class.getSimpleName();
  private boolean failFast;
  /** spring配置文件中mybatis的拦截器 */
  private Interceptor[] plugins;
  /** spring配置文件中mybatis的自定义类型集合 */
  private TypeHandler<?>[] typeHandlers;
  /** spring配置文件中mybatis的自定义类型包 */
  private String typeHandlersPackage;
  /** spring配置文件中mybatis的别名集合 */
  private Class<?>[] typeAliases;
  /** spring配置文件中mybatis的别名包 */
  private String typeAliasesPackage;
  /** 数据库产品名 */
  private DatabaseIdProvider databaseIdProvider = new DefaultDatabaseIdProvider();

3 实现接口InitializingBean:

图中由于 实现了InitializingBean类,也就是需要执行初始化代码。

这里数据源与SqlSessionFactoryBuilder不能为空,然后去构建SqlSessionFactory 。

4 代码实现:

4.1 生成一个MyBatis的全局对象Configuration(全局配置类)。


4.2 读取typeAliasesPackage属性并解析,放入Configuration(全局配置类)中,对应TypeAliasRegistry

4.3 读取typeAliases属性并解析,放入Configuration(全局配置类)中,对应TypeAliasRegistry类

4.4 读取plugins属性并解析,放入Configuration(全局配置类)中,对应InterceptorChain类。

4.5 读取typeHandlersPackage属性并解析,放入Configuration(全局配置类)中,对应TypeHandlerRegistry类。

4.6 读取typeHandlers属性并解析,放入Configuration(全局配置类)中,对应TypeHandlerRegistry类。

4.7 解析MyBatis的全局配置文件,放入Configuration(全局配置类),创建Spring事务。

4.8 重新生成环境信息,设置数据库产品名称。

4.9 解析MyBatis的SQL文件,放入Configuration(全局配置类)

10:最后生成一个SqlSessionFactory对象。

总结:

注意一定要区分,什么时候读取Spring配置文件,什么时候读取MyBatis配置文件。

具体MyBatis的操作只能一步一步的去研究。

© 著作权归作者所有

共有 人打赏支持
tara_qri
粉丝 10
博文 47
码字总数 21319
作品 0
海淀
私信 提问
Spring与MyBatis整合

序言 在MyBatis学习中,我们会发现很多重复性的代码,例如: //创建连接 private SqlSessionFactory sqlSessionFactory = SessionFactoryUtils .getSessionfactory().getSqlSessionFactory(......

开源俱乐部
2014/07/09
0
0
SpringMVC,mybatis,spring整合

需求:使用SpringMVC和mybatis完成商品列表查询 一 整合思路 1 相关jar包(maven) 2 整合dao层 mybatis和springmvc整合,通过spring管理mapper接口 使用mapper的扫描器自动扫描mapper接口在...

Bbigbug
2018/04/25
0
0
spring中的mybatis(1)

开门见山 <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource"/> <property name="mapperLocations" value="cl......

hyssop
2015/10/29
0
0
springmvc学习笔记(6)-springmvc整合mybatis(IDEA中通过maven构建

springmvc学习笔记(6)-springmvc整合mybatis(IDEA中通过maven构建) 标签: springmvc mybatis [TOC] 本文主要展示如何在intellij IDEA中通过maven构建springmvc+mybatis框架的开发环境。 需求...

brianway
2016/03/10
432
0
springmvc 项目完整示例04 整合mybatis mybatis所需要的jar包 mybatis配置文件 sql语句 mybatis应用

百度百科: MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。 iBATIS一词来源于“...

noteless
2016/02/24
0
0

没有更多内容

加载失败,请刷新页面

加载更多

php-fpm配置文件详解

php-fpm配置文件详解 php-fpm配置文件路径: /usr/local/php-fpm/etc/php-fpm.conf ,还包含了一个配置文件路径下的所有以.conf结尾的配置文件(子配置文件)/usr/local/php-fpm/etc/php-fp...

李超小牛子
24分钟前
3
0
排序-堆排序

在说明堆排序的过程前得先了解什么是堆: 先看下图(来源于java数据结构和算法(第二版)): 堆是个完全二叉树,并且父节点总是大于(小于)它的孩子,因此根节点永远是最大或者最小的元素。...

FAT_mt
53分钟前
3
0
matlab-自控原理 秩判据 能观性 已知线性定常系统的A和C矩阵

  matlab : R2018a 64bit     OS : Windows 10 x64 typesetting : Markdown    blog : my.oschina.net/zhichengjiu    gitee : gitee.com/zhichengjiu   code clearclc% x'=A*x......

志成就
今天
1
0
不改一行代码定位线上性能问题

背景 最近时运不佳,几乎天天被线上问题骚扰。前几天刚解决了一个 HashSet 的并发问题,周六又来了一个性能问题。 大致的现象是: 我们提供出去的一个 OpenAPI 反应时快时慢,快的时候几十毫...

编程SHA
今天
5
0
Go 示例测试实现原理剖析

简介 示例测试相对于单元测试和性能测试来说,其实现机制比较简单。它没有复杂的数据结构,也不需要额外的流程控制,其核心工作原理在于收集测试过程中的打印日志,然后与期望字符串做比较,...

恋恋美食
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部