MyBatis的执行流程分析

核心流程介绍

我们都知道MyBtis是对JDBC的封装,不管怎样,JDBC的那一套还是不会变的,只是做了抽象、封装、归类等;所以我们顺着JDBC的思路来说下MyBatis的执行流程
JDBC执行六部走

注册驱动
获取Connection连接
执行预编译
执行SQL
封装结果集
释放资源

然后我看这张图来分析下MyBatis的是怎样来封装这个过程的
在这里插入图片描述

#### MyBatis执行八步走

上面中流程就是MyBatis内部核心流程,咱么来一步步解释下

1.读取MyBatis的核心配置文件。mybatis-config.xml为MyBatis的全局配置文件,用于配置数据库连接、属性、类型别名、类型处理器、插件、环境配置、映射器(mapper.xml)等信息,这个核心配置文件最终会被封装成一个Configuration对象。

2.加载映射文件。映射文件即SQL映射文件,该文件中配置了操作数据库的SQL语句,映射文件是在mybatis-config.xml中加载;可以加载多个映射文件,每个文件对应数据库中的一张表。

配置的方式有两种

<!-- 使用包路径,扫描包下所有的接口,这种方式比较方便 -->
<package name="com.mybatis.demo"/>
<!-- resource:使用相对路径的资源引用-->
<!-- url:使用绝对类路径的资源引用-->
<!-- class:使用映射器接口实现类的完全限定类名-->
<mapper resource="xxx.xml"/>

3.构造会话工厂获取SqlSessionFactory。这个过程其实是用建造者设计模式使用SqlSessionFactoryBuilder对象构建的,SqlSessionFactory的的最佳作用域是应用作用域,

4.创建会话对象SqlSession。由会话工厂创建SqlSession对象,对象中包含了执行SQL语句的所有方法,每个线程都应该有它自己的 SqlSession 实例。SqlSession的实例不是线程安全的,因此是不能被共享的,所以它的最佳的作用域是请求或方法作用域。

5.Executor执行器。是MyBatis的核心,负责SQL语句的生成和查询缓存的维护,它将根据SqlSession传递的参数动态地生成需要执行的SQL语句,同时负责查询缓存的维护

    SimpleExecutor – SIMPLE 就是普通的执行器。

    ReuseExecutor -执行器会重用预处理语句(PreparedStatements)

    BatchExecutor --它是批处理执行器

6.MappedStatement对象。MappedStatement是对解析的SQL的语句封装,一个MappedStatement代表了一个sql语句标签,如下:

<select id="selectUserList" resultType="com.mybatis.User">    
    select * from t_user
</select>

7.输入参数映射。输入参数类型可以是基本数据类型,也可以是Map、List、POJO类型复杂数据类型,这个过程类似于JDBC的预编译处理参数的过程。

8.封装结果集。可以封装成多种类型可以是基本数据类型,也可以是Map、List、POJO类型复杂数据类型。封装结果集的过程就和JDBC封装结果集是一样的这样一对比,就可以看出了其实Mybatis的执行流程和JDBC其实大同小异

如果用代码表示如下:

	// 1.加载配置文件
    InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
    // 2. 创建SqlSessionFactory对象实际创建的是DefaultSqlSessionFactory对象
    SqlSessionFactory builder = new SqlSessionFactoryBuilder().build(inputStream);
    // 3. 创建SqlSession对象实际创建的是DefaultSqlSession对象
    SqlSession sqlSession = builder.openSession();
    // 4. 创建代理对象
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    // 5. 执行查询语句
    List<User> users = mapper.selectUserList();

小结

这节主要通过对JDBC执行步骤的分析来对比分析MyBatis的执行的流程,总体上来看它们的执行步骤基本是一样的,所以大家是不是觉得MyBatis这个框架其实也挺简单的,总结下就是

加载解析配置文件
处理参数
执行查询
封装结果集
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值