• MyBatis的执行流程分析


    核心流程介绍

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

    1. 注册驱动
    2. 获取Connection连接
    3. 执行预编译
    4. 执行SQL
    5. 封装结果集
    6. 释放资源

    然后通过这张图来分析下MyBatis的是怎样来封装这个过程的:

    MyBatis执行八步走

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

    1. 读取 MyBatis 的核心配置文件。mybatis-config.xmlMyBatis的全局配置文件,用于配置数据库连接、属性、类型别名、类型处理器、插件、环境配置、映射器 (mapper.xml)等信息,这个核心配置文件最终会被封装成一个 Configuration 对象。
    2. 加载映射文件。映射文件即SQL映射文件,该文件中配置了操作数据库的SQL语句,映射文件是在 mybatis-config.xml中加载;可以加载多个映射文件,每个文件对应数据库中的—张表。配置的方式有两种:
    <!-- 使用包路径,扫描包下所有的接口,这种方式比较方便 -->
    <package name="com.mybatis.demo"/>
    
    <!-- resource∶使用相对路径的资源引用-->
    <!-- url∶使用绝对类路径的资源引用-->
    <!-- class∶使用映射器接口实现类的完全限定类名-->
    <mapper resource="xxx.xml"/>
    
    1. 构造会话工厂获取 SqlSessionFactory。这个过程其实是用建造者设计模式使用SqlSessionFactoryBuilder对象构建的, SqlSessionFactory的的最佳作用域是应用作用域

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

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

      • SimpleExecutor -SIMPLE 就是普通的执行器。
      • ReuseExecutor -执行器会重用预处理语句(PreparedStatements)
      • BatchExecutor --它是批处理执行器
    4. MappedStatement对象。 MappedStatement是对解析的SQL的语句封装,一个 MappedStatement 代表了一个sql语句标签,如下∶

    <select id="selectUserList" resultType="com.mybatis.User">
        select * from t_user
    </select>
    
    1. 输入参数映射。输入参数类型可以是基本数据类型,也可以是 Map 、List 、 POJO 类型复杂数据类型,这个过程类似于 JDBC 的预编译处理参数的过程。
    2. 封装结果集。可以封装成多种类型可以是基本数据类型,也可以是 Map、 List 、 P0JO 类型复杂数据类型。封装结果集的过程就和 JDBC 封装结果集是一样的。

    这样一对比,就可以看出了其实 Mybatis 的执行流程和 JDBC 其实大同小异
    如果用代码表示如下∶

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

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

    • 加载解析配置文件
    • 处理参数
    • 执行查询
    • 封装结果集
    本文原创自博客园文章,想了解Java相关知识,欢迎到我的博客踩踩~ 地址:https://www.cnblogs.com/reminis/
  • 相关阅读:
    day01--计算机硬件基础笔记
    22 Jun 18 Django,ORM
    21 Jun 18 Django,ORM
    20 Jun 18 复习, mysql
    20 Jun 18 Django,ORM
    19 Jun 18 复习, 正则表达式
    19 Jun 18 Django
    15 Jun 18 复习, shutil模块
    15 Jun 18 Django
    14 Jun 18 复习, form表单
  • 原文地址:https://www.cnblogs.com/reminis/p/14515612.html
Copyright © 2020-2023  润新知