MyBatis 执行流程分析




在这里插入图片描述


1. MyBatis 执行流程概述


上篇文章讲到 MyBatis入门 MyBatis 的基本入门案例我们实现了通过 MyBatis 去获取数据库的数据,那么他的基本流程如下:

在这里插入图片描述

  1. 第一步:是从配置文件中根据配置的信息构建 SqlSessionFactory 对象,由于配置文件中关联了映射文件 UserMapper.xml ,所以在 SqlSessionFactory 中也存在映射文件的内容

  2. 第二步:是从 SqlSessionFactory 中获取 SqlSession 会话对象,其实 SqlSession 会话对象底层封装的就是 conn 连接对象

  3. 第三步:是通过 SqlSession 会话对象调用查询方法 selectList 然后根据参数找到映射文件中的 sql 语句并将数据封装到 pojo 的User对象中

名词解释

SqlSessionFactory : SqlSessionFactory 是 MyBatis 框架中的一个重要接口,用于创建SqlSession 对象,它是与数据库交互的主要入口点。

通过SqlSessionFactory,可以获取一个线程安全的SqlSession对象,用于执行数据库操作。SqlSessionFactory的创建是相对较重的操作,一般在应用程序的启动阶段进行创建,并在整个应用程序的生命周期内保持单例。它使用了一组配置信息,包括数据源、事务管理器、映射器(Mapper)等。

一般来说,创建SqlSessionFactory需要以下几个步骤:

- 加载MyBatis的配置文件,即包含了数据库连接信息、映射器配置等。
- 构建Configuration对象,作为SqlSessionFactory的配置信息。
- 使用SqlSessionFactoryBuilder根据配置信息创建SqlSessionFactory实例。

SqlSession: SqlSession是MyBatis框架中的一个核心接口,用于执行与数据库的交互操作。它提供了一系列的方法,包括查询、插入、更新、删除等,用于操作数据库并返回相应的结果。

SqlSession的一般使用流程如下:

- 通过SqlSessionFactory获取SqlSession对象。
- 使用SqlSession执行具体的数据库操作,如查询、插入、更新、删除等。
- 提交事务(如果使用了事务管理器)或手动调用SqlSession的commit()方法,将操作提交到数据库。
- 关闭SqlSession,释放相应的资源。 

SqlSession提供了一系列的方法,例如查询、新增、更新、删除等,用于与数据库进行交互。
每个线程应该拥有自己的SqlSession实例,并在使用完后及时关闭,以确保数据库连接的正确释放。一般推荐使用 try-with-resources 或 try-finally 等方式来确保 SqlSession 的正确关闭。


2. MyBatis 配置文件详解

在我们上个案例中的完整配置如下:

spring:
  datasource:
    username: root
    password: root
    url: jdbc:mysql://192.168.0.108:3306/study_mybatis?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8
    driver-class-name: com.mysql.cj.jdbc.Driver


# mybatis 配置
mybatis:
  # 配置实体类所在的包
  type-aliases-package: com.snow.po
  # 配置 xml 文件所在的包
  mapper-locations: classpath:com/snow/mapper/*.xml
  configuration:
    # 开启驼峰命名
    map-underscore-to-camel-case: true

logging:
  level:
    com.snow.mapper: debug

MyBatis 配置信息详解:
在这里插入图片描述

  • username: 数据库用户名,这里设置为"root"。

  • password: 数据库密码,这里设置为"root"。

  • url: 数据库连接地址,这里使用MySQL数据库,连接地址为"jdbc:mysql://192.168.0.108:3306/study_mybatis?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8"。其中,192.168.0.108是数据库服务器的IP地址,3306是MySQL数据库的默认端口号,"study_mybatis"是要连接的数据库名称,后面的部分是一些可选的连接参数,例如设置时区和字符编码等。

  • driver-class-name: 数据库驱动类全限定名,这里使用的是MySQL的JDBC驱动类"com.mysql.cj.jdbc.Driver"。
    type-aliases-package: 配置实体类所在的包。这里设置为"com.snow.po",表示MyBatis会扫描该包下的实体类,并将其注册为别名,方便在映射文件中使用类名代替全限定名。

  • mapper-locations: 配置XML映射文件所在的包或路径。这里设置为"classpath:com/snow/mapper/*.xml",表示MyBatis会在指定的包下按通配符的方式搜索映射文件,并加载到MyBatis中供使用。该配置可以指定一个或多个映射文件,多个映射文件之间使用逗号或分号分隔。

  • configuration: MyBatis的全局配置项。

  • map-underscore-to-camel-case: 配置是否开启驼峰命名规则。这里设置为"true",表示开启驼峰命名规则,即将下划线分隔的数据库字段名转换为驼峰命名的Java属性名。例如,数据库字段名为"first_name",则对应的Java属性名为"firstName"。默认情况下,MyBatis是关闭这个功能的,需要手动开启。


3. Mappers 映射器

mappers(映射器):UserMapper.xml====>UserMapper.java接口 关联.

mappers 是 MyBatis 配置文件中用于指定映射器(Mapper)接口的配置项

Mapper接口是定义了与数据库交互的方法的接口,它与映射文件相对应,可以通过映射文件中定义的SQL语句来执行数据库操作。配置mappers使得MyBatis能够将Mapper接口与对应的映射文件进行关联。

以下是一个示例的mappers配置项的写法:

mappers:
  - package: com.snow.mapper
  - mapper: com.snow.mapper.UserMapper

可以有两种方式进行配置:

  • 使用package配置项指定一个包名,表示将该包下的所有Mapper接口进行自动扫描,并将其与对应的映射文件进行关联。
  • 使用mapper配置项指定一个具体的Mapper接口的全限定名,表示将该Mapper接口与对应的映射文件进行关联。

可以根据实际情况配置 mappers,使得 MyBatis 能够正确加载和使用您定义的Mapper接口。



在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/m0_60915009/article/details/132775315