重学SpringBoot3-整合SSM

重学SpringBoot3-整合SSM

CoderJia 26 2024-03-16

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 对象中的重复定义工作。

Spring Initializr创建项目

选择依赖

2. 配置数据源

application.propertiesapplication.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.propertiesapplication.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 应用中。

MyBatis自动配置类

主要功能

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.propertiesapplication.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 也允许开发者通过自定义配置类覆盖这些默认配置,或者提供额外的配置。例如,可以定义自己的 SqlSessionFactoryBeanDataSource Bean 来覆盖自动配置提供的 Bean,或者添加额外的 MyBatis 插件。

总结

Spring Boot 3 整合 SSM 框架进行数据访问的过程,通过减少配置和增加自动化,大大简化了开发流程。这种整合方式使得开发者可以更专注于业务逻辑的实现,同时享受 Spring Boot 和 SSM 各自的优势。