MyBatis-架构与原理

  • 架构图
  • API接口层
  • 数据处理层
  • 基础支撑层
  • 流程
  • MyBatis核心类
  • SqlSessionFactoryBuilder
  • SqlSessionFactory对象由SqlSessionFactoryBuilder创建
  • SqlSession
  • Executor
  • StatementHandler
  • ResultHandler


架构图

mybatis搭建三层架构 mybatis的架构流程_SQL

API接口层

提供给外部使用的API,通过这些API来操作数据库

数据处理层

负责具体的SQL解析、查找、执行和结果映射,根据调用请求完成数据库操作。

基础支撑层

连接管理、事务管理、配置加载、缓存处理。

流程

mybatis搭建三层架构 mybatis的架构流程_数据库_02

  1. MyBatis的初始化从加载mybatis-config.xml文件开始,解析构造Configuration类
  2. 加载配置,将SQL的配置信息加载成一个个的MappedStatement对象,包括传入参数配置、执行的SQL、结果映射配置,存储在内存中
  3. SQL解析,当API接口接收调用参数时,会接收到传入的ID和传入对象(Map、JavaBean或基本类型),MyBatis会根据ID找到对应的MappedStatement,然后根据传入参数对象对MappedStatement解析,解析后得到最终要执行的SQL语句和参数
  4. SQL执行,将最终得到的SQL和参数拿到数据库进行执行,得到返回结果
  5. 结果映射,将操作数据库的结果映射的配置进行转化,可以转化成HashMap、Bean或基础数据类型,并返回结果。

MyBatis核心类

SqlSessionFactoryBuilder

每一个MyBatis应用的入口是SqlSessionFactoryBuilder
通过XML配置文件创建Configuration对象,然后通过build()创建SqlSessionFactory。

String resource = "mybatis-config.xml";
Reader reader = Resources.getResourceAsReader(resource);
sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
sqlSessionFactory = sqlSessionFactoryBuilder.build(reader);

mybatis-config.xml中的配置,SqlSessionFactoryBuilder会解析xml成Configuration对象,然后根据Configuration对象创建默认的SqlSessionFactory实例。

SqlSessionFactory对象由SqlSessionFactoryBuilder创建

SqlSessionFactory主要是为了创建SqlSession对象,和SqlSessionFactoryBuilder对应一样,创建一个全局的就可以

SqlSession

完成一次数据库访问和结果的映射,类似于数据库的Session,由于不是线程安全的,所以SqlSession对象的作用域需要限制在方法内,默认实现类是DefaultSqlSession,有两个必须的属性:Configuration和Executor,SqlSession对数据库的操作都是由Executor来完成的。
SqlSession:默认创建DefaultSqlSession并开启一级缓存,创建Executor

SqlSession的getMapper()是联系应用程序和MyBatis的纽带,应用程序访问getMapper时,MyBatis会根据参数类型和XML配置信息生成一个代理对象,这个代理对象叫做Mapper对象,应用程序获取Mapper对象之后就可以通过这个对象唉访问MyBatis的SqlSession对象。

Executor

Executor对象在创建Configuration对象时创建,并缓存在Configuration对象中,主要功能是调用StatementHandler访问数据库,并将查询结果存入缓存中。

StatementHandler

真正访问数据库的地方,调用ResultSetHandler

ResultHandler

处理查询结果

mybatis搭建三层架构 mybatis的架构流程_API_03

https://mp.weixin.qq.com/s/2NPkpJyCvRuE-0UDxVDHRw