• 【Mybatis】3 的操作类型对象


    前言知识汇总


    上篇文章中我们已经详细介绍了Mybatis的存储类对象。我们上篇提到了:

    Mapper.xml当中的SQL标签都被解析成了一个一个的MappedStatement对象。那么我们当中的SQL是基于什么形式进行封装的呢?

    我们要知道,Java当中一切皆对象。MappedStatement当中SQL被封装成了MappedStateMent当中的SqlSource对象。

    我们通过sqlSource.getBoundSql()来获取一个BoundSql对象,BoundSQL当中的对象就是对于SQL语句的真实封装。

    Cofiguration也好,MappedStatent也好存储的是我们配置文件或者是在注解当中书写的配置信息。它们是一个存储对象。
    我们还要有操作类型的对象。

    一:操作类型对象

    Executor

    在 MyBatis 中,Executor 是一个重要的接口,它负责执行存储在映射器文件中的 SQL 语句,以及处理结果集。Executor 接口定义了对 SQL 语句的执行和处理,是 MyBatis 中执行数据库操作的核心组件之一。

    主要作用

    Executor 接口的主要作用包括以下几个方面:
    1. 执行 SQL 语句:Executor 负责执行映射器文件中配置的各种 SQL 语句,包括查询、插入、更新、删除等操作。
    2. 缓存处理:Executor 可以对 SQL 语句执行的结果进行缓存处理,提高重复查询的性能。
    3. 结果集处理:Executor 负责将数据库返回的结果集处理成 Java 对象或基本数据类型,以便应用程序进一步处理和展示。

    主要实现

    在 MyBatis 中,Executor 接口有三个主要的实现类:


    - SimpleExecutor:SimpleExecutor 是 Executor 接口的简单实现,它对每个 SQL 语句的执行创建一个新的 Statement 对象,并直接执行 SQL 语句,适用于较为简单的数据库操作场景。
    - ReuseExecutor:ReuseExecutor 是 Executor 接口的复用实现,它会重用 Statement 对象,减少 SQL 语句执行的开销,适用于需要频繁执行 SQL 语句的场景。

    BatchExcutor是一个批处理的执行器,我们知道在JDBC当中就有批处理的操作,如果我们想再JDBC当中仍然有批处理的操作。使用这个BatchExcutor即可。也就是一个Connection处理一坨SQL语句,我们就可以考虑使用这个执行器了。

    值得注意的是最常用的执行器往往是最简单的这个:SimpleExecutor,完成常规的操作,这个是最核心的Excutor,这要是Mybatis当中内置推荐的执行器。如果我们不更改配置的话,默认使用的就是Configuration当中的简单的Excutor

    总体来说,Executor 在 MyBatis 中起着承担着执行 SQL 语句和处理结果集的重要角色,它通过不同的实现方式,能够满足不同场景下的数据库操作需求,并在一定程度上提高了数据库访问的性能。

    Configuration三个功能:封装Mybatis-Config.xml,存储MappedStatement,创建其他的核心执行的对象包括Excutor,所以配置肯定也在这个类里边。

    ReuseExcutor这是一个复用Excutor,他复用的是Statement。我们说任何对数据库的操作底层都得用JDBC,JDBC中的三大件东西Connection是连接数据库的ResultSet是获取查询结果集的,真正和数据库交互的是Statement。复用Statement在什么条件下会发生呢?
    Statement与什么想关呢?Statement是与SQL语句相关的。如果我们的SQL在任何条件下都不会改变的话,我们这样的话就可以一直使用这个Statement对象,减少了对象的创建,保证了性能。
    这个SQL语句的话可以是增删改查任何的语句,但是不能有任何的改变,任何的改变的话,就不适用了。

    补充知识点

    JDBC当中的批处理是啥意思?
    我们最简单的JDBC是获取一个Connection之后,我们直接获取一个Statement对象,然后拿着这个对象和数据库沟通,然后取到结果集,释放连接。但是这样会有一个问题,需要频繁的有连接的创建和关闭。或者是连接池的获取和归还。
    我们想到了批处理,也就是在一个连接之上,与数据库进行多语SQL交互,这样的话我们就省略了大量的Connetion的创建和销毁,这就是批处理,大大提高了性能。
    站在Mybatis当中如果我们想要使用批处理的话,我们就可以使用BatchExcutor

    为什么说IO,连接都是非常真贵的资源?
    我们知道,我们搞Java开发我们底层面临的是OS操作系统的资源,在它之上我们构建了一个Java虚拟机的东西。我们写Java程序是运行在虚拟机层面上的东西,然后我们想要在虚拟机当中去建立网络连接、或者是io、或者是线程的时候,这个时候虚拟机就办不到了,需要去沟通操作系统,因为只有操作系统可以进行读取文件,可以去访问互联网,只有操作系统可以操作CPU操作线程、进程。所以,我们知道这些操作被后都有操作系统,都会有这些native的方法的操作,而这些东西都是耗时和占用资源的,所以我们认为这些东西,必须要管,必须要复用,必须要池化。

    Excutor来处理和数据库的操作,那么这个是怎么和JDBC建立连接的呢,这就和后面的对象有关系了。
     


      
     ParameterHandler


       - ParameterHandler 用于处理 SQL 语句中的参数,包括对输入参数的设置和处理。它负责将 Java 对象中的属性值映射到预编译的 SQL 语句中的参数位置上。

    ResultSetHandler


       - ResultSetHandler 用于处理查询结果集,将数据库返回的数据转换为 Java 对象或基本数据类型,以便应用程序进行后续的处理和展示。

     StatementHandler


       - StatementHandler 用于处理 SQL 语句的执行,包括对 SQL 语句的组装、参数设置、语句执行和结果集的处理等。它负责实际执行 SQL 语句,并处理各种异常情况。

    以上这些操作类型对象一起构成了 MyBatis 框架中数据库操作的基本组成部分,它们协同工作,实现了数据库访问层的抽象和封装,为开发者提供了灵活、高效的数据库访问手段。

  • 相关阅读:
    遇到的题目
    22、短信登录(隐藏用户的敏感信息)
    反编译字节码分析java包装类型和引用类型及装箱与拆箱
    382.链表随机结点 | 398.随机数索引
    1236288-25-7 DSPE-PEG-FA Folic acid PEG DSPE 磷脂-聚乙二醇-叶酸
    【C语言】--操作符详解
    DOM元素可编辑自定义样式获取编辑后的数据
    【Vue】npm run build 打包报错:请在[.env.local]中填入key后方可使用...
    ubuntu 18.04 下 D435i SDK安装 ros-wapper安装 绘制rosbag 运行vins-mono离线/在线
    7月28日第壹简报,星期四,农历六月三十
  • 原文地址:https://blog.csdn.net/u014755700/article/details/134265841