SpringBoot-数据访问
SpringBoot-数据访问
SpringBoot整合Spring、SpringMVC、Mybatis(SSM)进行数据访问场景开发
SSM整合流程
- 导入
mybatis-spring-boot-starter - 配置数据源信息
- 配置Mybatis的Mapper接口扫描与XML映射文件扫描
- 编写实体类,Mapper接口,生成MapperXML,编写sql进行CRUD
创建SSM整合项目并导入相应的依赖
<!-- 所有springboot项目都必须继承自 spring-boot-starter-parent -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.5.9</version>
</parent>
<dependencies>
<!--web场景-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--lombok简化JavaBean开发,自动生成构造器、getter/seter、自动生成Builder模式等-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<scope>compile</scope>
</dependency>
<!-- mysql驱动-->
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
</dependency>
<!-- 第三方依赖 mybaits场景-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>3.0.3</version>
</dependency>
</dependencies>
<!-- SpringBoot应用打包插件 -->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
配置数据源与Mybatis
# 配置数据源
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.type=com.zaxxer.hikari.HikariDataSource
spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=123456
# 配置整合Mybatis
mybatis.mapper-locations=classpath:/mapper/*.xml
# 打开驼峰命名规则
mybatis.configuration.map-underscore-to-camel-case=true
# 开启调试模式,详细打印开启了哪些自动配置
debug=true
# Positive:生效的自动配置,Negative:不生效的自动配置
编写CRUD
用户实体类
/**
* 用户实体类
*/
@Data
public class User {
/**
* 用户id
*/
private Integer userId;
/**
* 用户名
*/
private String userName;
/**
* 账户余额
*/
private Integer balance;
}
Mapper接口
public interface UserMapper {
/**
* 每个方法都在Mapper文件有一个对应的sql标签对应
* 所有参数都应该用@Param注解进行签名,以后使用指定的名字在SQL中取值
* @param userId 用户id
* @return 用户信息
*/
User getUserById(@Param("user_id") Long userId);
}
使用mybatisX插件快速生成MapperXML
<?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.demo.ssm.mapper.UserMapper">
<!-- 接口的全类名和namespace的值是一一对应的-->
<select id="getUserById" resultType="com.demo.ssm.bean.User">
select *
from user
where user_id = #{user_id}
</select>
</mapper>
控制层接口
/**
* 用户控制层接口
*/
@RestController
public class UserController {
@Autowired
private UserMapper userMapper;
@GetMapping("/user/{user_id}")
public User getUser(@PathVariable("user_id") Long userId) {
return userMapper.getUserById(userId);
}
}
启动类
/**
* @MapperScan 注解告诉mybatis,扫描哪个包下面的所有接口
* 使用mybatis.mapper-locations 配置参数 告诉Mybatis,每个接口的xml文件在哪里
* Mybatis自动关联绑定
*/
@MapperScan(basePackages = "com.demo.ssm.mapper")
@SpringBootApplication
public class SSMApplication {
public static void main(String[] args) {
SpringApplication.run(SSMApplication.class, args);
}
}
自动配置原理
JDBC场景的自动配置
mybatis-spring-boot-starter依赖会导入spring boot官方依赖spring-boot-starter-jdbc,jdbc是操作数据库的场景,引入该场景后会使以下配置类激活

- DataSourceAutoConfiguration:数据源核心配置类。会根据classpath中的依赖和配置文件智能选择并创建DataSource Bean。如果没有引入任何连接池则默认使用HikariCP。
- DataSourceTransactionManagerAutoConfiguration:自动配置Spring的事务管理器。它会检查容器中是否存在DataSource Bean,如果存在,则自动创建一个DataSourceTransactionManager实例,并将其注册为PlatfromTransactionManager。这就是为什么在SpringBoot中可以直接使用@Transactional注解的原因。
- JdbcTemplateAutoConfiguration:自动配置JdbcTemplate。如果容器中存在DataSource Bean,且classpath下存在JdbcTemplate类,它会自动创建一个JdbcTemplate Bean和一个NamedParameterJdbcTemplate Bean。你可以直接在业务代码中通过@Autowired注入并使用它们,无需手动new。
引入spring-boot-starter-jdbc后,你只需要在配置文件中提供数据库连接信息,SpringBoot就会自动为你搭建以下体系:
1.连接池(HikariCP)
2.事务管理器(DataSourceTransactionManager)
3.数据库操作模板(JdbcTemplate)
第三方Mybatis场景的自动配置
在引入mybatis-spring-boot-starter依赖后,Mybatis的自动配置主要通过mybatis-spring-boot-autoconfigure模块实现,利用了SPI(Service Provider Interface)机制和条件注解来完成Bean的自动注册

当Spring Boot启动时,AutoConfigurationImportSelector会去读取classpath下所有的jar包中的特定文件,其路径为INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
而在mybatis-spring-boot-autoconfigure包中,该文件定义了启用自动配置的全路径名,如上图所示
核心配置类-MybatisAutoConfiguration
MybatisAutoConfiguration是自动配置的核心类。它使用了一系列关键注解来控制配置和加载时机和条件
类级注解分析
@org.springframework.context.annotation.Configuration(proxyBeanMethods = false)
@ConditionalOnClass({ SqlSessionFactory.class, SqlSessionFactoryBean.class })
@ConditionalOnSingleCandidate(DataSource.class)
@EnableConfigurationProperties(MybatisProperties.class)
@AutoConfigureAfter({ DataSourceAutoConfiguration.class, MybatisLanguageDriverAutoConfiguration.class })
public class MybatisAutoConfiguration {...}
- @Configuration:
- 声明这是配置类,可以向Spring容器注册Bean
- @ConditionalOnClass({ SqlSessionFactory.class, SqlSessionFactoryBean.class }):
- 这是前置条件。只有当类路径下存在MyBatis的核心类SqlSessionFactory和SqlSessionFactoryBean时,该配置类才会生效。
- 这意味着必须引入Mybatis的核心依赖(通常starter已经帮你引入了)
- @ConditionalOnSingleCandidate(DataSource.class):
- 这是数据源依赖条件。只有当Spring容器中存在且仅有一个DataSource(数据源)Bean时,配置才会生效
- 因为Mybatis必须依赖数据库链接,如果没有数据源,Mybatis配置就没有意义
- @EnableConfigurationProperties(MybatisProperties.class):
- 开启对配置类的支持。它将MybatisProperties注册为Bean,以便配置文件中的配置(mybatis.xx)绑定到该类的字段中
- @AutoConfigureAfter({ DataSourceAutoConfiguration.class, MybatisLanguageDriverAutoConfiguration.class }):
- 加载顺序控制。指定该配置类必须在Spring Boot的数据源自动配置完成之后再执行。这保证了在初始化Mybatis时,数据源已经准备好了
核心Bean的注册
在MybatisAutoConfiguration类内部,主要定义了两个核心Bean:SqlSessionFactory和SqlSessionTemplate
- SqlSessionFactory: Mybatis的核心接口,用于创建SqlSession
- SqlSessioonTemplate: Mybatis-spring提供的核心类,它是线程安全的,用于替代Mybatis原生的SqlSession
Mapper接口的自动扫描
虽然MybatisAutoConfiguration创建了基础设施,但Mapper接口的注册通常由@MapperScan注解处理

通常做法为在启动类上添加@MapperScan("com.example.mapper"),其原理为利用@Import(MapperScannerRegistrar.class)批量给容器中注册组件:解析指定包路径里面的每一个类,为每一个Mapper接口类,创建Bean定义信息,注册到容器中
整体的流程
通过这种机制,开发者只需要引入依赖并配置数据源,即可零配置使用Mybatis,极大简化了集成难度
- 引入依赖:项目引入
mybatis-spring-boot-starter - 类加载:Spring Boot启动,读取
INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports,发现MybatisAutoConfiguration - 条件校验:
- 检查类路径是否有Mybatis核心包
- 检查容器是否有数据源
- 属性绑定:读取配置文件中的mybatis.*配置到MybatisProperties
- Bean注册:
- 创建SqlSessionFactory(绑定数据源、加载XML、配置插件)
- 创建SqlSessionTemplate(线程安全的操作模版)
- Mapper扫描:根据@MapperScan配置,将Mapper接口注册为Spring Bean

浙公网安备 33010602011771号