# Mybatis 工作原理与源码分析(一)
Mybatis 工作原理与源码分析(一)
Mybatis简介
- MyBatis是持久层框架,它支持自定义sql,存储过程,以及高级映射,Mybatis消除了Jdbc的获取结果集的工作,通过xml或者注解的方式,配置和映射原始类型
Mybatis框架工作原理图
工作原理解析
- 通过SqlSessionFactoryBuilder从mybatis-config.xml配置文件来构建SqlSessionFactory****然后,SqlSessionFactory的实例直接开启一个SqlSession**,再通过SqlSession实例获得Mapper对象并运行Mapper映射的SQL语句,完成对数据库的CRUD和事务提交,之后关闭SqlSession。
工作流程
-
扫描mybatis-config.xml配置数据源、mapper映射文件等,Mybatis基于Xml文件配置生成Configuration和MappedStatement(包括动态sql,参数映射类型,结果映射配置)。
-
SqlSessionFactoryBuilder通过Configuration对象生成SqlSessionFactory用来开启SqlSession。
-
SqlSession对象完成和数据库的交互:
- 调用Api接口层中的方法(Mapper接口中的方法)。
- SqlSession通过调用api的Statement ID找到对应的MappedStatement对象。
- 通过Executor(负责动态SQL的生成和查询缓存的维护)将MappedStatement对象进行解析,sql参数转化、动态sql拼接,生成jdbc Statement对象。
- Jdbc执行sql。
- MappedStatement中的结果映射关系,将返回结果转化成HashMap、JavaBean等存储结构并返回。
MyBatis框架层次图
源码目录结构
-
日志:org.apache.ibatis.logging.*
-
异常:org.apache.ibatis.exceptions
-
缓存:org.apache.ibatis.cache.
-
解析:org.apache.ibatis.parsing
-
类型处理器:org.apache.ibatis.type
-
IO:org.apache.ibatis.io
-
反射:org.apache.ibatis.reflection.*
-
数据源:org.apache.ibatis.datasource.*
-
事物:org.apache.ibatis.transaction.*
-
会话:org.apache.ibatis.session.*
-
JDBC单元测试工具:org.apache.ibatis.session
-
构建:org.apache.ibatis.builder.*
-
映射:org.apache.ibatis.mapping
-
脚本:org.apache.ibatis.scripting.*
-
注解:org.apache.ibatis.annotations
-
绑定:org.apache.ibatis.binding
-
执行器:org.apache.ibatis.binding.*
-
插件:org.apache.ibatis.plugin
未完待续。。。。