首页 > 其他分享 >Mybatis学习笔记(二)——Mybatis核心对象

Mybatis学习笔记(二)——Mybatis核心对象

时间:2022-09-04 18:59:20浏览次数:75  
标签:SqlSessionFactory 配置文件 openSession 对象 笔记 SqlSession 实例 Mybatis SqlSessionFactory

1.Mybatis核心对象

MyBatis 有三个基本要素:

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

1.1 核心接口和类

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

 

 

 1.1.1 SqlSessionFactoryBuilder

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

 通过源码分析,可以发现以上方法都是在调用同一签名方法,即:

build(Reader reader, String environment, Properties properties)

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

  • build(InputStream inputStream, String environment, Properties properties)

  • build(Reader reader, String environment, Properties properties)

  • build(Configuration config)

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

由于字节流和字符流都属于读取配置文件的方式,所以就很容易想到构建一个 SqlSessionFactory 有两种方式,即:读取 XML 配置文件和编写代码。一般习惯为采取 XML 配置文件的方式来构造 SqlSessionFactory,这样一方面可以避免硬编码,另一方面方便日后配置人员修改,避免重复编译代码。

SqlSessionFactoryBuilder的生命周期和作用域

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

1.1.2 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,即随着应用程序的生命周期一直存在。这种“存在于整个应用运行期间,并且只存在一个对象实例”的模式就是所谓的单例模式(指在运行期间有且仅有一个实例)。

1.1.3 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,不需要获取映射器。这是 iBatis 版本留下的方式。例如《第一个MyBatis程序》一节的示例就是这种方式执行的 SQL 语句。

SqlSession生命周期和作用域

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

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

1.2 Mybatis核心配置文件(mybatis-config.xml)

MyBatis 配置文件的结构如下。

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><!-- 配置 -->
    <properties /><!-- 属性 -->
    <settings /><!-- 设置 -->
    <typeAliases /><!-- 类型命名 -->
    <typeHandlers /><!-- 类型处理器 -->
    <objectFactory /><!-- 对象工厂 -->
    <plugins /><!-- 插件 -->
    <environments><!-- 配置环境 -->
        <environment><!-- 环境变量 -->
            <transactionManager /><!-- 事务管理器 -->
            <dataSource /><!-- 数据源 -->
        </environment>
    </environments>
    <databaseIdProvider /><!-- 数据库厂商标识 -->
    <mappers /><!-- 映射器 -->
</configuration>

mybatis-config.xml 文件中的元素节点是有一定顺序的,节点位置必须按以上位置排序,否则会编译错误。

下面介绍 XML 配置文件中的重要元素(标签)。
configuration 元素是整个 XML 配置文件的根节点,其角色就相当于是 MyBatis 的总管,MyBatis 所有的配置信息都会存放在它里面。

1.2.1 properties标签

 

 

 

 

 

 

 

 

 

 

标签:SqlSessionFactory,配置文件,openSession,对象,笔记,SqlSession,实例,Mybatis,SqlSessionFactory
From: https://www.cnblogs.com/worthmove/p/16655700.html

相关文章

  • Flink1.12学习笔记
    一、Flink简介Flink是有状态的流式计算。Flink是一个框架和分布式处理引擎,用于在无边界和有边界数据流上进行有状态的计算。Flink可以部署在任意地方,Apacheflink是一......
  • Mybatis学习笔记(一)——简介
     1.Mybatis是什么MyBatis是一个开源、轻量级的数据持久化框架,是JDBC和Hibernate的替代方案。MyBatis内部封装了JDBC,简化了加载驱动、创建连接、创建statement......
  • MyBatis 三
    设置别名    安装MyBatisx插件可以很方便的管理 ......
  • 《Unix/Linux系统编程》第1,2章学习笔记 20201209戴骏
    一.知识点归纳第一章引言1.本书目标编程背景知识详细介绍了程序开发步骤,包括汇报器、编译器、链接器等。动态数据结构的应用字符串标记化、搜索树节点、插入和......
  • OFFCE_WORD笔记
    二级或者三级标题是1而不是1.1怎么改点击段落里面的“多级列表”那个小的倒三角形选中带有“章”字的多级列表就可以啦此时样式这里也会发生变化......
  • MyBatis 二
    Mapper代理:1、可以简化后期执行SQL2、解决原生方式中的硬编码  开发步骤:1、定义与SQL映射文件同名的Mapper接口,并且将Mapper接口与Sql映射文件放置在......
  • IOC常用的创建对象方式
    通过无参构造方法来创建1、User.javapublicclassUser{privateStringname;publicUser(){System.out.println("user无参构造方法");}pub......
  • Jx.Cms开发笔记(七)-升级BootstrapBlazor到6.9.x
    由于BootstrapBlazor升级到6.9以后的升级还是非常大的,比如图标库升级到了6.1.2,bs升级到了5.2.0。所以这里记录一下升级过程。升级BootstrapBlazor主程序直接升级BootstarpB......
  • java随笔(六)——对象序列化
    ObjectOutputStream(对象输出流,序列化)通过ObjectOutputStream可以将所需要存储的对象数据进行序列化再输出存储。例如:Students=newStudent("张三",19);ObjectOutput......
  • Mybatis Plus公共字段自动填充
    MybatisPlus公共字段自动填充,也就是在插入或者更新的时候为指定字段赋予指定的值,使用它的好处就是可以统一对这些字段进行处理,避免了重复代码。 实现步骤:1、在实体类......