mybatis学习(二)

第二天:

  • 执行过程(工作原理)
  • 功能架构
  • 底层实现

执行过程

第一步:

             InputStream is = Resources.class.getResourceAsStream("/mybatis.xml");

     加载mybatis.xml核心配置文件,得到一个流对象 is ..

第二步: 

            SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is);

       先创建sqlSessionFactoryBuider这个构建者对象,在调用build方法,传入is这个流对象。

在这个过程中,首先,MyBatis会先去创建一个XMLConfigBuilder解析器对象,解析我们刚才传进来的那个流对象,

解析完成之后,返回一个configuration对象,这个对象里面封装了解析之后我们配置的信息,正好这个configuration对象,就是我们这个方法创建SqlSessionFactory类型对象需要的参数。

mybatis学习(二)

返回的就是一个实现了SqlSessionFactory接口的DefaultSqlSessionFactory对象

第三步:

有了这个SqlSesionFactory实现类的对象之后,我们调用openSession()的方法。

这个过程中

mybatis学习(二)

需 要 通 过TransactionFactory 生成 Transaction 对象, 并且, 还需要创建核心执行器 Executor 对象,基于这些条件,

最终创建了实现SqlSession接口的DefaultSqlSession对象

第四步:

之后, 通过 SqlSession 对象执行相应的操作, 如果执行成功, 调用 commit 方法提交事务; 如果失败, 调用rollback 方法事务回滚. 最后, 调用 close 方法关闭session 资源.

以上, 就是 大概的MyBatis 的运行原理

------------------------------------------------------------------------------------------------------------

MyBatis运行过程中涉及到的类和接口:

1.1.1 Resources(C) 类

用于加载MyBatis核心配置文件

1.1.2 XMLConfigBuilder(C) 类

用于解析xml文件(核心配置文件)

1.1.3 Configuration(C)类

用于存放xml文件解析后的结果

1.1.4 DefaultSqlSessionFactory(C)类

是SqlSessionFactory(I)的实现类,创建时需要使用Configruation对象作为参数

1.1.5 SqlSession(I)接口

是MyBatis操作的核心

1.1.6 DefaultSqlSession(C)类

是SqlSession接口的实现类

1.1.7 TransactionFactory(I)接口

用于生产Trasaction对象(关于事务的)

1.1.8 Transaction(I) 接口

用于表示操作数据库的事务对象

1.1.9 Executor(I)接口

是MyBatis的核心执行器,类似于JDBC中的Statement,常用的实现类是SimpleExecutor

------------------------------------------------------------------------------------------------------------

功能架构

  

mybatis学习(二)

我们把Mybatis的功能架构分为三层:

  • API接口层:提供给外部使用的接口API,开发人员通过这些本地API来操纵数据库。接口层一接收到调用请求就会调用数据处理层来完成具体的数据处理。
  • 数据处理层:负责具体的SQL查找、SQL解析、SQL执行和执行结果映射处理等。它主要的目的是根据调用的请求完成一次数据库操作。
  • 基础支撑层:负责最基础的功能支撑,包括连接管理、事务管理、配置加载和缓存处理,这些都是共用的东西,将他们抽取出来作为最基础的组件。为上层的数据处理层提供最基础的支撑。

------------------------------------------------------------------------------------------------------------

底层实现

转载:https://www.cnblogs.com/my376908915/p/6812666.html

底层是对jdbc的封装和处理,映射等等,内容太多,想要深入学习可以读mybatis的源码,找相关资料。