一、mybatis简介:

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。本文将通过debug的方式来了解其工作原理。

二、mybatis的工作流程与原理

1:读取mybatis全局配置文件

将定义好的mybatis全局配置文件进行读取,并包装称为一个InputStream对象。这个比较简单,就不详细分析

2:解析配置文件(mybatis-config.xml)

由SqlSessionFactoryBuilder类的bulid方法驱动,对包装好的XML文件进行解析。很容易看到,其具体的解析任务是交给XMLConfigBuilder对象完成,并将读取的数据存入Configuration的对象中

Configuration作为解析配置文件过程中,最重要的一个类,它的作用主要如下:
a.读入配置文件
b.提供单例,为后续创建SessionFactory服务提供配置参数
c. 初始化配置信息

Mybatis的几乎所有配置文件信息都是存储在由XMLConfigBuilder构建的Configuration对象中。

3:SqlSessionFactory对象的创建

SqlSessionFactory对象由DefaultSessionFactory根据Configuration的信息去创建。

4:SqlSession的对象的创建

创建Executor对象,这是SqlSession对象去访问数据库的执行器,每一个SqlSession对象都维持着这样一个Executor。到此SqlSession对象创建完成,可以开始对数据库进行访问了。

5:SqlSession的执行过程

采用了动态代理技术,代理类的具体操作封装在invoke()方法之中,由此可见,SqlSession对结果进行了缓存,并封装在一个HashMap之中,其中key为sql语句,value为查询结果。