Mybatis 源码(二):整体设计概览

1、Mybatis整体架构

  Mybatis的整体框架分为三层,分别是基础支持层、核心处理层、和接口层。

 

1.1、接口层

  SqlSession是接口层的核心对象,是应用程序与Mybatis交互的桥梁。SqlSession接口定义数据查询、数据新增、数据修改、数据删除等对数据库库操作的方法。也定义了获取数据库连接、事务提交/回滚、资源关闭、缓存处理等方法。

  SqlSession接口方方法:

    

  接口层在接收到调用请求的时候,会调用核心处理层的相应模块来完成具体的数据库操作。

1.2、核心处理层

  核心处理层主要处理与数据库相关的操作。核心处理层功能的设计思想与JDBC笔记(二):JDBC的封装中提到原生JDBC封装思想一样,主要完成以下事情:

  1、输入参数解析,映射成JDBC类型;

  2、解析SQL语句,动态生成数据库可执行的SQL;

  3、执行SQL;

  4、输出参数解析,映射成实体对象。

1.3、基础支持层

  基础支持层主要支持核心处理层的工作,将通用功能进行封装实现复用。基础支持层包含数据源、事务、缓存、日志等功能。

    

2、Mybatis执行核心流程

1.1、Mybatis执行代码示例

  引用Mybatis 源码(一):源码编译准备中的代码示例分析Mybatis的核心执行流程

 1 public static void main(String[] args) throws IOException {
 2         String resource = "mybatis-config.xml";
 3         // 加载mybatis的配置文件
 4         InputStream inputStream = Resources.getResourceAsStream(resource);
 5         // 获取sqlSessionFactory
 6         SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
 7         // 获取sqlSession
 8         SqlSession sqlSession = sqlSessionFactory.openSession();
 9         // 查询用户
10         UserMapper mapper = sqlSession.getMapper(UserMapper.class);
11         User user02 = mapper.selectUserById("101");
12         System.out.println("user01: " + user02);
13     }
14 }

1.2、执行示例中的核心对象

1、SqlSessionFactoryBuiler

  SqlSessionFactoryBuiler是用来构建SqlSessionFactory的,SqlSessionFactory只需要一个,也就是说只要成功构建SqlSessionFactory,SqlSessionFactoryBuiler就没什么用了,SqlSessionFactoryBuiler的作用域只存在方法内部。

2、SqlSessionFactory

  SqlSessionFactory是用来创建SqlSession的,每次应用程序访问数据库,都需要创建一个会话。因为一直有创建会话的需要,所以SqlSessionFactory应该存在于应用的整个生命周期中(作用域是应用作用域)。

创建SqlSession只需要一个实例来做这件事就行了,否则会产生很多的混乱,和浪费资源。采用采用单例模式。

3、SqlSssion

  SqlSession是一个会话,线程不安全,线程之间不能共享。请求过来就创建SqlSession对象,在请求完成后关闭。作用域在一次请求中。

4、Mapper

  Mapper是从SqlSession中获取的,是一个代理对象,用于发送SQL来操作数据库的数据。作用域在一个SqlSession事务方法之内。

1.3、核心执行流程

  Mybatis的核心流程图如下:

                  

1、配置解析

  读取Mybtais的全局配置文件mybatis-config.xml、Mapper.xml映射文件,包含数据库连接信息,事务管理器、数据源、SQL映射文件等配置。配置解析源码分析:Mybatis 源码(三):Mybatis配置解析,核心流程图如下;

       

2、构建会话工厂SqlSessionFactory

  配置解析完成之后,返回了一个DefaultSqlSessionFactory,持有配置类Configuration的实例。

3、创建sqlSession对象(Executor执行器)

  由会话工厂创建SqlSession对象,创建sqlSession对象的核心是创建Executor执行器,Executor对象中包含了执行DML语句的所有方法。

  sqlSession对象创建源码分析:Mybatis 源码(五):SqlSession对象构建。核心流程图如下:

                   

5、SQL执行流程

  SQL执行流程源码分析:Mybatis源码(七):SQL执行流程。核心流程图如下:

                 

posted @ 2023-03-10 15:15  无虑的小猪  阅读(154)  评论(0编辑  收藏  举报