• MyBatis核心对象简介说明


    转自:

    MyBatis核心对象简介说明

    MyBatis 有三个基本要素:

    1. 核心接口和类
    2. MyBatis核心配置文件(mybatis-config.xml)
    3. SQL映射文件(mapper.xml)


    下面首先介绍 MyBatis 的核心接口和类,如下图
     


     
    每个 MyBatis 应用程序都以一个 SqlSessionFactory 对象的实例为核心
    首先获取 SqlSessionFactoryBuilder 对象,可以根据 XML 配置文件或者 Configuration 类的实例构建该对象
    然后获取 SqlSessionFactory 对象,该对象实例可以通过 SqlSessionFactoryBuilder 对象来获取。
    有了 SqlSessionFactory 对象之后,就可以进而获取 SqlSession 实例。
    SqlSession 对象中完全包含以数据库为背景的所有执行 SQL 操作的方法,用该实例可以直接执行已映射的 SQL 语句。

    SqlSessionFactoryBuilder

    SqlSessionFactoryBuilder 会根据配置信息或者代码生成 SqlSessionFactory,并且提供了多个 build() 方法重载,如图。
     


    从源码上,我们可以看出,可以发现以上方法都是在调用同一签名方法,即:

    build(Reader reader, String environment, Properties properties)

    由于参数 environment 和 properties 都可以为 null,去除重复的方法,真正的重载方法其实只有如下三种:

    1. build(InputStream inputStream, String environment, Properties properties)
    2. build(Reader reader, String environment, Properties properties)
    3. build(Configuration config)

    通过上述分析,发现配置信息可使用三种形式提供给 SqlSessionFactoryBuilder 的 build() 方法,为 InputStream(字节流)、Reader(字符流)、Configuration(类)。

    由于字节流和字符流都属于读取配置文件的方式,
    即创建SqlSessionFactory 有两种方式,

    1.    读取 XML 配置文件
    2.    编写代码

    SqlSessionFactoryBuilder的生命周期和作用域

             SqlSessionFactoryBuilder 的最大特点就是用过即丢。
            创建 SqlSessionFactory 对象之后,这个类就不存在了,
            因此 SqlSessionFactoryBuilder 的最佳范围就是存在于方法体内,也就是局部变量。

    SqlSessionFactory

               SqlSessionFactory 是工厂接口而不是现实类,它的功能创建 SqlSession 

               所有的 MyBatis 应用都以 SqlSessionFactory 实例为中心,SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder 对象来获取。
    有了它以后,顾名思义,就可以通过 SqlSession 提供的 openSession() 方法来获取 SqlSession 实例。源码如下。

     public interface SqlSessionFactory {
          SqlSession openSession();
          SqlSession openSession(boolean autoCommit);
          SqlSession openSession(Connection connection);
          SqlSession openSession(TransactionIsolationLevel level);
          SqlSession openSession(ExecutorType execType);
          SqlSession openSession(ExecutorType execType, boolean autoCommit);
          SqlSession openSession(ExecutorType execType, TransactionIsolationLevel level);
          SqlSession openSession(ExecutorType execType, Connection connection);
          Configuration getConfiguration();
    }
    

    SqlSessionFactory的生命周期和作用域

          SqlSessionFactory 对象一旦创建,就会在整个应用程序过程中始终存在。
    我们通常不会创建和销毁它,这样应用程序则无需多次创建SqlSessionFactory。
    所以SqlSessionFactory 的最佳作用域是 Application,即随着应用程序的生命周期一直存在(这种模式就是所谓的单例模式) 

    SqlSession

         SqlSession 是用于执行持久化操作的对象,类似于 JDBC 中的 Connection。
      它提供了面向数据库执行 SQL 命令所需的所有方法,可以使用SqlSession 实例直接运行已映射的 SQL 语句,其中有以下常见的方法:

      void clearCache();
       Configuration getConfiguration();
       void rollback(boolean force);
       void commit(boolean force);
       int delete(String statement, Object parameter);
       ...

    SqlSession 的用途主要有两种

    1. 获取映射器。让映射器通过命名空间和方法名称找到对应的 SQL,并发送给数据库,执行后返回结果。
    2. 直接通过“命名空间(namespace)+SQL id”的方式执行 SQL,不需要获取映射器

    SqlSession生命周期和作用域

         SqlSession 对应一次数据库会话。由于数据库会话不是永久的,
    因此 SqlSession 的生命周期也不是永久的,每次访问数据库时都需要创建 SqlSession 对象

     注意事项:
           每个线程都有自己的 SqlSession 实例,SqlSession 实例不能被共享,
            也不是线程安全的。因此 SqlSession 的作用域范围是 request 作用域或方法体作用域内

  • 相关阅读:
    【C++】 C++入门和基础
    1.32 Cubemx_STM32F429串口中断+空闲中断
    GBase 8c V3.0.0数据类型——窗口函数
    【单元测试】Junit 4(二)--eclipse配置Junit+Junit基础注解
    基于JAVA音乐播放器计算机毕业设计源码+系统+数据库+lw文档+部署
    一款能“干掉” ChatGPT 的应用「GitHub 热点速览」
    软件保护工具VMProtect将许可系统集成到应用程序(8):硬件锁定
    【每日一道LeetCode】——面试题 17.04. 消失的数字、189. 轮转数组
    GPT实战系列-LangChain实现简单链
    数组排序,实现中间数字最大,向两边越来越小的排序
  • 原文地址:https://blog.csdn.net/qq_25073223/article/details/128032152