MyBatis的执行流程

MyBatis的执行流程:

Spring Boot项目

  • MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。
  • 在Spring Boot项目中集成MyBatis可以极大地简化数据库访问层的开发。

Spring Boot则通过自动配置和约定大于配置的原则,进一步简化了MyBatis的使用。以下是Spring Boot中MyBatis的执行流程:

一、配置MyBatis:

  • 在Spring Boot项目中,MyBatis的配置主要通过application.yml(或application.properties)文件完成。

开发者需要配置数据源信息:

  1. 数据库URL
  2. 用户名
  3. 密码
  4. 指定Mapper XML文件的位置以及别名包的位置
# application.yml示例配置:
spring:  
  datasource:  
    url: jdbc:mysql://localhost:3306/mydb?useSSL=false&serverTimezone=UTC  
    username: root  
    password: root  
    driver-class-name: com.mysql.cj.jdbc.Driver  

#  这是MyBatis配置项的根节点,表明下面的配置项都是关于MyBatis的  
mybatis:  
  # mapper-locations: 这个配置项用于指定MyBatis的Mapper XML文件的位置
  
  # classpath:mapper/*.xml
  # 表示在类路径下的mapper目录中寻找所有的.xml文件。这些XML文件通常包含了SQL语句和结果映射的定义。
  mapper-locations: classpath:mapper/*.xml  
  
  # type-aliases-package: 这个配置项用于指定别名包的位置。	
  # MyBatis会为在这个包下的所有Java类创建别名,这样你就可以在Mapper XML文件中使用简单的类名而不是全限定类名。
	
  # com.example.demo.model包下的所有类都会被MyBatis赋予别名,方便在SQL映射文件中引用。
  type-aliases-package: com.example.demo.model


二、启动应用程序与数据库准备:

当Spring Boot应用程序启动时,它会做以下几件事来准备与数据库的交互:

1、读取配置:

  • 首先,应用程序会读取配置文件,获取如何连接到数据库的信息(如数据库的地址、用户名和密码)。

2、准备数据源:

  • 根据配置文件中提供的信息,Spring Boot会自动配置并准备好一个数据源(DataSource)。这个数据源是应用程序与数据库之间的桥梁,负责管理和提供数据库连接。

3、创建会话工厂(SqlSessionFactory):

  • MyBatis的SqlSessionFactory是通过Spring Boot的自动配置机制创建的。它是MyBatis的核心组件,负责创建与数据库的会话(SqlSession)。可以将SqlSessionFactory视为一个生产SqlSession的工厂。

4、会话(SqlSession)与数据库操作:

  • 当应用程序需要与数据库进行交互时,它会从SqlSessionFactory中获取一个SqlSession实例。这个SqlSession代表了与数据库的一次会话,可以用来执行SQL查询、插入、更新或删除等操作
  • SqlSession是线程不安全的,因此最佳实践是在方法作用域内获取并使用它,然后在使用完毕后立即关闭。但在Spring集成中,通常通过声明式事务管理来处理SqlSession的生命周期。

5、执行器(Executor)工作:

  • 在MyBatis内部,Executor是执行SQL语句的核心组件。它负责准备SQL语句、绑定参数、执行查询或更新,并处理结果集。
  • MyBatis提供了三种Executor类型:SimpleExecutor、ReuseExecutor和BatchExecutor,它们分别适用于不同的使用场景。但在大多数情况下,开发者不需要直接与Executor交互,因为MyBatis和Spring Boot会处理这些细节
这些步骤共同确保了当Spring Boot应用程序启动时,它能够正确地与数据库建立连接,并通过MyBatis执行SQL操作。

三、Mapper接口扫描与注入

Spring Boot扫描Mapper接口,并为它们创建代理实现类。这些实现类在内部会使用SqlSession来执行数据库操作,而SqlSession内部则封装了Executor执行器。

Service层示例

@Service  
public class UserService {  
    private final UserMapper userMapper;  
  
    @Autowired  
    public UserService(UserMapper userMapper) {  
        this.userMapper = userMapper;  
    }  
  
    public User getUserById(Integer id) {  
        // 此处调用Mapper方法,触发MyBatis内部流程  
        // 包括Executor执行器的使用来执行SQL语句  
        return userMapper.findUserById(id);  
    }  
}

@Mapper
public interface userMapper{
	
	public User findUserById(Integer id);
}


<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > 
        
<mapper namespace="com.example.demo.mapper.UserMapper">  
  
    <select id="findUserById" resultType="com.example.demo.model.User">  
        SELECT * FROM users WHERE id = #{id}  
    </select>  
  
</mapper>

在MyBatis内部,Executor执行器负责准备SQL语句、绑定参数、执行查询或更新,并处理结果集。根据配置和SQL类型(查询、更新等),Executor可能是SimpleExecutor、ReuseExecutor或BatchExecutor之一。

四、MyBatis内部流程 - Executor执行器

在MyBatis内部,当Mapper接口的方法被调用时,会经历以下步骤:

1、SQL准备: MyBatis首先根据Mapper方法和其对应的XML映射文件或注解准备SQL语句。

2、参数绑定: 接着,它会将方法参数绑定到SQL语句中的占位符上。

3、执行器选择: MyBatis根据配置选择一个Executor实现(SimpleExecutor、ReuseExecutor或BatchExecutor)。

4、SQL执行: Executor执行器使用数据源中的连接执行SQL语句。

5、结果处理: 执行器将数据库返回的结果集转换为Java对象或对象列表。

6、返回结果: 最后,转换后的Java对象被返回给Service层,进而返回给调用者


在这里插入图片描述

  • 34
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值