Spring Boot 3整合SSM(Spring、Spring MVC和MyBatis)进行数据访问,是构建现代 Java Web 应用的常见实践。这种整合利用了 Spring Boot 的自动配置特性,简化了传统 SSM 架构的配置复杂性,同时保留了 SSM 强大的数据访问和业务逻辑处理能力。
Spring Boot整合SSM示例
以下是详细的整合流程:
1. 创建Spring Boot项目
首先,使用 Spring Initializr(https://start.spring.io/)或你喜欢的 IDE 创建一个新的 Spring Boot 项目。在依赖选择部分,至少需要包含以下模块:
- Spring Web:用于构建 Web 应用和 RESTful 服务。
- MyBatis Framework:提供 MyBatis 整合支持。
- Spring Boot DevTools:提供热加载、自动重启等开发时功能。
- MySQL Driver:这里使用阿里的数据源,或者你使用的其他数据库驱动。
- Lombok:避免 Java 对象中的重复定义工作。
2. 配置数据源
在 application.properties
或 application.yml
文件中配置数据库连接。Spring Boot 会自动读取这些配置来创建和配置数据源。
# 数据源配置
spring.datasource.url=jdbc:mysql://localhost:3306/dbtest1?useSSL=false&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=root123
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
确保数据库 URL、用户名和密码等配置正确。
3. 配置MyBatis
Spring Boot 会自动配置 MyBatis 的基本设置,但你可能需要进一步配置映射文件的位置或别名处理规则。可以在 application.properties
中进行配置:
# mybatis配置
mybatis.mapper-locations=classpath:mapper/*.xml
这里,mybatis.mapper-locations
指定了 MyBatis 的映射文件位置。
4. 实现数据访问对象(DAO)
使用 MyBatis 时,你需要创建 Mapper 接口,用于定义数据库操作的方法。例如:
@Mapper
public interface UserMapper {
User selectUserById(Long id);
}
然后,创建对应的 XML 映射文件 UserMapper.xml
,定义 SQL 语句和映射规则:
<?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.coderjia.ssm.dao.UserMapper">
<select id="selectUserById" resultType="com.coderjia.ssm.bean.User">
SELECT *
FROM users
WHERE id = #{id}
</select>
</mapper>
5. 编写服务层和控制器
服务层负责业务逻辑,它会使用前面定义的 Mapper 接口。然后,创建一个控制器来处理 HTTP 请求,调用服务层的方法。
// service接口
public interface IUserService {
public User getUserById(Long id);
}
// service实现类
@Service
public class UserServiceImpl implements IUserService {
@Resource
private UserMapper userMapper;
@Override
public User getUserById(Long id) {
return userMapper.selectUserById(id);
}
}
@RestController
@RequestMapping("/users")
public class UserController {
@Resource
private IUserService userService;
@GetMapping("/{id}")
public ResponseEntity<User> getUserById(@PathVariable Long id) {
User user = userService.getUserById(id);
return ResponseEntity.ok(user);
}
}
整个项目结构如下:
6. 运行和测试
一旦完成上述配置和代码编写,Spring Boot 应用就已经整合了 SSM 进行数据访问。运行 Spring Boot 应用,并测试 API 是否如预期工作,如下测试接口 localhost:8081/users/1
可以获取数据。
DataSourceAutoConfiguration类
DataSourceAutoConfiguration
类是 Spring Boot 自动配置机制的一部分,它负责自动配置数据源(DataSource)的设置。这一过程主要基于应用的配置属性( application.properties
或 application.yml
文件中)来完成。DataSourceAutoConfiguration
类使得开发者无需手动配置数据源和数据库连接池,大大简化了Spring Boot 应用中数据访问层(DAO层)的配置工作。
主要功能
DataSourceAutoConfiguration
类的主要功能包括:
- 自动检测并配置数据源:根据 classpath 中的库和配置文件中的设置,自动选择并配置合适的数据源。例如,如果 classpath 中包含 HikariCP,那么默认会配置为使用 HikariCP 连接池。
- 配置连接池属性:根据
application.properties
或application.yml
文件中的配置,自动设置连接池的各种属性,如最大连接数、最小空闲连接数、连接超时时间等。 - 支持多种数据库:可以自动配置与多种数据库的连接,包括但不限于 MySQL、PostgreSQL、H2 等。
- 环境特定配置:支持根据不同的环境(开发、测试、生产)使用不同的数据库配置。
工作原理
当 Spring Boot 应用启动时,DataSourceAutoConfiguration
会被自动执行,前提是 classpath 中存在 javax.sql.DataSource
接口,以及相应的数据库驱动。它会根据应用配置文件中的数据源配置属性(如数据库URL、用户名和密码等)来初始化数据源。此过程涉及以下关键属性:
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=myuser
spring.datasource.password=mypassword
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# 连接池的其他配置...
自定义和扩展
虽然 DataSourceAutoConfiguration
提供了大量的默认设置,但 Spring Boot 也允许开发者通过添加自定义配置来覆盖这些默认值,或者完全禁用自动配置,手动定义数据源和数据库连接池。
如果你需要更复杂的数据源配置,如多数据源支持,你可能需要禁用 DataSourceAutoConfiguration
,并通过自定义配置类来手动配置数据源。
MyBatisAutoConfiguration类
MyBatisAutoConfiguration
是 Spring Boot 对 MyBatis 框架支持的一部分,负责自动配置 MyBatis 和 Spring Boot 应用的集成。这个自动配置类简化了使用 MyBatis 进行数据访问时的配置工作,使得开发者可以更加轻松地将 MyBatis 集成到 Spring Boot 应用中。
主要功能
MyBatisAutoConfiguration
类的主要功能包括:
- 自动配置 SqlSessionFactory:它创建并配置
SqlSessionFactory
实例,这是 MyBatis 中用于创建SqlSession
的工厂类。通过SqlSessionFactory
,可以执行 SQL 命令、获取映射器(Mapper)等。 - 自动配置 SqlSessionTemplate:它配置了
SqlSessionTemplate
,这是SqlSession
的线程安全的实现,用于在 Spring 管理的事务中执行持久化操作。 - 自动扫描 Mapper 接口:根据配置自动扫描并注册 Mapper 接口,这样就可以在 Spring 应用中自动注入 Mapper 并使用。
- 集成事务管理:自动配置事务管理器,支持 MyBatis 的事务与 Spring 的事务管理进行集成。
工作原理
在 Spring Boot 应用启动过程中,如果检测到 mybatis-spring-boot-autoconfigure
依赖在项目的 classpath 中,MyBatisAutoConfiguration
就会被自动启用。它会根据应用的配置文件(如 application.properties
或 application.yml
)和 classpath 中的资源,如 MyBatis 的配置文件和 Mapper XML 文件,自动配置 MyBatis 的相关组件。
为了利用 MyBatisAutoConfiguration
提供的自动配置,需要在 Spring Boot 应用中添加 MyBatis Spring Boot Starter 依赖:
<!-- Maven -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>版本号</version>
</dependency>
或者,对于 Gradle 项目:
implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:版本号'
在配置文件中,可以定义 MyBatis 特定的配置属性,例如:
# 数据源配置
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=myuser
spring.datasource.password=mypassword
# MyBatis配置
mybatis.type-aliases-package=com.example.myapp.model
mybatis.mapper-locations=classpath:mapper/*.xml
自定义和扩展
虽然 MyBatisAutoConfiguration
提供了丰富的自动配置功能,但 Spring Boot 也允许开发者通过自定义配置类覆盖这些默认配置,或者提供额外的配置。例如,可以定义自己的 SqlSessionFactoryBean
或 DataSource Bean
来覆盖自动配置提供的 Bean,或者添加额外的 MyBatis 插件。
总结
Spring Boot 3 整合 SSM 框架进行数据访问的过程,通过减少配置和增加自动化,大大简化了开发流程。这种整合方式使得开发者可以更专注于业务逻辑的实现,同时享受 Spring Boot 和 SSM 各自的优势。