个人对MyBatis源码的理解(一)

本文深入剖析MyBatis框架,从架构概览、执行流程到源码解析,详细介绍了配置加载、SqlSessionFactory创建、SqlSession操作以及Mapper接口的使用。重点讲解了Configuration类、类型处理器、Mapper接口的映射过程,揭示了MyBatis如何处理SQL请求并返回结果集。
摘要由CSDN通过智能技术生成

一、 框架概览

1.架构图

       基础架构层大体一共可以分为三层,分别是基础支撑层,数据处理层,接口层。

       基础支撑层:负责最基本的基础功能支撑,包括连接管理,失误管理,配置加载,缓存处理。这些都是共用的东西,将他们抽取出来最为最基础的组件,为上层数据处理层提供最基础的支撑。

        数据处理层:负责具体的SQL查找,SQL解析,SQL执行,和执行结果的映射处理等。它主要的目的是根据调用的请求完成一次数据库操作。

        API接口层:提供给外部使用的接口API,开发人员通过这些本地API来操纵数据库,接口层一接收到请求就会调用数据处理层来完成具体的数据处理。

1.执行流程

总体步骤为:

1、加载配置文件到Configuration

2、构建SqlSessionFactory

3、打开SqlSession会话

4、Executor开始处理请求

5、SqlSource解析SQL语句

6、StatementHandler执行SQL语句

7、ParameterHandler设置参数

8、StatementHandler执行SQL语句

9、ResultSetHandler处理结果集

二、源码解析

1.框架初始化

Configuration,是框架的核心配置类,保存了包括映射器、别名、映射方法等信息

SqlSessionFactoryBuilder.build(InputStream inputStream, String environment,Properties properties)

XMLConfigBuilder.parseConfiguration(XNode root)解析核心配置,赋值给configuration对象

XMLConfigBuilder.settingsElement(Properties props)

XMLConfigBuilder.typeAliasesElement(XNode parent)

XMLConfigBuilder.environmentsElement(XNode context)

XMLConfigBuilder.mapperElement(XNode parent)

Configuration.addMappers(String packageName)

MapperRegistry.addMappers(String packageName)

MapperRegistry.addMappers(String packageName, Class<?> superType)扫描dao包,把mapper接口添加到注册表对象

MapperRegistry.addMapper(Class<T> type)

2.映射数据类型

Configuration.typeHandlerRegistry属性

TypeHandlerRegistry.<init>()注册各种java->数据库的类型处理器

Configuration.typeAliasRegistry属性

TypeAliasRegistry.<init>()注册各种基本类型的别名

 3.创建SqlSession

(1).通过Resources加载全局配置文件

Resource类apache.ibatis.io包下面的一个类,通过io流读取配置文件,把配置文件解析成一个InputSream输入流对象

(2).实例化sqlSessionFactoryBulider

通过build方法去读取Mybatis的配置文件,
由XMLConfigBuilder解析配置文件流,通过parser.parse(),将配置信息放置在configuration中,创建DefaultSessionFactory对象,DefaultSessionFactory是SqlSessionFactory的实现类

(3).通过openSession()获取SqlSession对象

进入DefaultSessionFactory中发现openSession()里面调用了openSessionFromDataSource方法

4.调用Mapper接口的抽象方法完成SQL语句

1.获取代理对象

 2.执行Mapper接口方法

                                                                                                                                        未完结...... 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值