Mybatis源码学习(一)-整体框架理解
2014-12-12 15:11
323 查看
一、对源码先上一个结构图:
源代码主要在org.apache.ibatis目录下,18个包,其中在应用中主要的包有:builder、session、cache、type、transaction、datasource、jdbc、mapping,提供支撑服务的包有annotation、binding、io、logging、plugin、reflection、scripting、exception、executor、parsing
二、从使用入手
MyBatis使用的三板斧是SqlSessionFactoryBuilder和SqlSessionFactory、SqlSession
SqlSessionFactoryBuilder
支持9种构造方法,其实最主要的是包含Configuration对象的构造方法,目的是为了通过加载配置文件创造SqlSessionFactory对象,真实最终返回的是DefaultSqlSessionFactory对象
所有的构造方法最终都是调用build(Configuratiron)方法,这就要来研究一下Configuration对象,其实他就是对xml配置文件的对象映射,关于xml文件结构组成可从源码中看出如下:
本文介绍一下Configuration的大框架,后续开个专辑专门研究Configuration的细节
?
属性:
先来看属性的加载,属性的加载最重要的是了解三种属性来源(属性配置文件、当前文件的属性、java代码输入)和三种属性的加载顺序(先加载配置文件,在加载config文件的属性,最后加载java代码输入)
?
主要是类的完整路径和简单别名的对应关系加载,保存在容器typeAliasRegistry中,最终映射到configuratiron对象中
?
用户自定义类型处理器,保存在typeHandlerRegistry容器中,最终保存在configuration对象中
?
主要是加载mapper.xml文件,同构mapperParser对文件进行解析,保存在容器mapperRegistry中,最终保存到configuration对象中
?
主要加载数据源、和事务配置信息,由Environment.Builder对象进行处理,并将信息保存到configuratiron对象
?
加载ibatis自身工作需要配置的所有设置信息,为configuration对象进行赋值
?
SqlSessionFactory的作用是承上启下,作为SqlSession的工厂,主要是工作必须是提供获取SqlSession的方法,同时还提供了一个获取Configuration的方法
其中SqlSessionFactory提供了8种获取SqlSession的方法,主要涉及4个参数:是否自动提交、事务级别、ExecutorType(Statement类型【普通、预处理、批处理】)、自定义Connection
其中需要注意的是openSession()方法默认不是自动commit的。
?
?
final TransactionFactory transactionFactory = getTransactionFactoryFromEnvironment(environment);
tx = transactionFactory.newTransaction(environment.getDataSource(), level, autoCommit);
这个需要重点关注。创建事务,将Connection传递给tx的过程。
3、SqlSession,真实干活的是DefaultSqlSession
SqlSession类主要封装了Configuration对象、Executor对象、是否自动提交
SqlSession是在程序中真实干活的人,我们在使用Mybatis中打交道最频繁的就是SqlSessinon对象,上个结构图,看看他都在干啥
看到图了,就没有什么秘密了,他就是在干数据的日常操作的活,只不过是用他自己封装的一套东西,比如说Configuration(封装Connection【来源可以使Pool】)、Executor(封装Statement)、ResultHandler(封装处理ResultSet对象)、RowBounds(封装分页对象),提供了CRUD,提供了缓存机制,提供了根据配置文件获取Sql语句的方法,提供了事务的提交和回滚等。
相关文章推荐
- Mybatis源码学习(一)-整体框架理解
- android开发——框架理解及源码学习计划
- Mybatis源码研究2:框架整体设计
- SSH框架整体理解和总结(框架分析+环境搭建+实例源码下载)
- myBatis学习--myBatis框架原理理解
- MyBatis源码学习(二)-Configuration对象理解
- zepto源码--整体框架--学习笔记
- MyBatis源码学习(二)-Configuration对象理解
- Mybatis源码研究2:框架整体设计
- Mybatis源码研究2:框架整体设计
- Mybatis原理学习2:框架整体设计
- 【mybatis源码分析】原理分析之二:框架整体设计
- 【新技术,学习、商业均可】HTML5 全新高大尚后台 bootstrap springmvc mybatis java企业级通框架源码入门
- Mybatis源码研究2:框架整体设计
- Mybatis源码研究2:框架整体设计
- Mybatis源码研究2:框架整体设计
- VueJs 源码分析 ---(一) 整体对 vuejs 框架的理解
- Android源码学习——ActivityManager框架解析
- TLD(Tracking-Learning-Detection)学习与源码理解之(三)
- MIna学习 连接类的整体框架