MyBatis 执行流程分析

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
云数据库 RDS PostgreSQL,高可用系列 2核4GB
简介: 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接口。


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
2月前
|
人工智能 Java 数据库连接
Mybatis执行流程
本文详细分析了 MyBatis 的执行流程,介绍了其核心组件如 SqlSessionFactoryBuilder、SqlSessionFactory、SqlSession 的作用与实现原理,并通过源码解析了 SQL 语句的执行过程,包括动态代理、缓存机制及数据库查询的实现,帮助读者深入理解 MyBatis 的内部工作机制。
Mybatis执行流程
|
6月前
|
SQL XML Java
一、MyBatis简介:MyBatis历史、MyBatis特性、和其它持久化层技术对比、Mybatis下载依赖包流程
一、MyBatis简介:MyBatis历史、MyBatis特性、和其它持久化层技术对比、Mybatis下载依赖包流程
255 69
|
SQL XML Java
mybatis-源码深入分析(一)
mybatis-源码深入分析(一)
|
8月前
|
SQL Java 数据库连接
【潜意识Java】深入理解MyBatis的Mapper层,以及让数据访问更高效的详细分析
深入理解MyBatis的Mapper层,以及让数据访问更高效的详细分析
1090 1
|
SQL XML Java
MyBatis初探:揭示初始化阶段的核心流程与内部机制
MyBatis初探:揭示初始化阶段的核心流程与内部机制
130 2
MyBatis初探:揭示初始化阶段的核心流程与内部机制
|
Java 数据库连接 mybatis
mybatis包扫描环境分析,最简单的环境准备
mybatis包扫描环境分析,最简单的环境准备
|
Java 数据库连接 Maven
Private method ‘getVideoList()‘ is never used,mybatis必须指定Mapper文件和实体目录,在参考其他人写的代码,要认真分析别人的代码,不要丢失
Private method ‘getVideoList()‘ is never used,mybatis必须指定Mapper文件和实体目录,在参考其他人写的代码,要认真分析别人的代码,不要丢失
|
SQL Java 数据库连接
Mybatis技术专题(3)MybatisPlus自带强大功能之多租户插件实现原理和实战分析
Mybatis技术专题(3)MybatisPlus自带强大功能之多租户插件实现原理和实战分析
1016 1
|
Java 数据库连接 mybatis
结构性模式之---外观模式、MyBatis中Configuration的外观模式的使用分析
结构性模式之---外观模式、MyBatis中Configuration的外观模式的使用分析