重学SpringBoot3-整合SSM

更多SpringBoot3内容请关注我的专栏:《SpringBoot3》
期待您的点赞👍收藏⭐评论✍

重学SpringBoot3-整合SSM

  • Spring Boot整合SSM示例
    • 1. 创建Spring Boot项目
    • 2. 配置数据源
    • 3. 配置MyBatis
    • 4. 实现数据访问对象(DAO)
    • 5. 编写服务层和控制器
    • 6. 运行和测试
  • DataSourceAutoConfiguration类
    • 主要功能
    • 工作原理
    • 自定义和扩展
  • MyBatisAutoConfiguration类
    • 主要功能
    • 工作原理
    • 自定义和扩展
  • 总结

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 usersWHERE id = #{id}</select>
</mapper>

5. 编写服务层和控制器

服务层负责业务逻辑,它会使用前面定义的 Mapper 接口。然后,创建一个控制器来处理 HTTP 请求,调用服务层的方法。

// service接口
public interface IUserService {public User getUserById(Long id);
}// service实现类
@Service
public class UserServiceImpl implements IUserService {@Resourceprivate UserMapper userMapper;@Overridepublic User getUserById(Long id) {return userMapper.selectUserById(id);}
}@RestController
@RequestMapping("/users")
public class UserController {@Resourceprivate 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 各自的优势。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/544560.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

力扣热题100_矩阵_240_搜索二维矩阵 II

文章目录 题目链接解题思路解题代码 题目链接 240. 搜索二维矩阵 II 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性&#xff1a; 每行的元素从左到右升序排列。 每列的元素从上到下升序排列。 示例 1&#xff1a; 输入&#xf…

【计算机视觉】二、图像形成——实验:2D变换编辑(Pygame)

文章目录 一、向量和矩阵的基本运算二、几何基元和变换1、几何基元(Geometric Primitives)2、几何变换(Geometric Transformations)2D变换编辑器0. 程序简介环境说明程序流程 1. 各种变换平移变换旋转变换等比缩放变换缩放变换镜像变换剪切变换 2. 按钮按钮类创建按钮 3. Pygam…

RabbitMQ高级-高级特性

1.消息可靠性传递 在使用RabbitMQ的时候&#xff0c;作为消息发送方希望杜绝任何消息丢失或者投递失败场景。RabbitMQ为我们提供了两种方式来控制消息的投递可靠性模式 1.confirm 确认模式 确认模式是由exchange决定的 2.return 退回模式 回退模式是由routing…

Ubuntu Linux - Primavera P6 EPPM 安装及分享

引言 根据计划&#xff0c;近日我制作了基于Ubuntu Linux 的P6虚拟机环境&#xff0c;同样里面包含了全套P6 最新版应用服务 此虚拟机仅用于演示、培训和测试目的。如您在生产环境中使用此虚拟机&#xff0c;请先与Oracle Primavera销售代表取得联系&#xff0c;以获取所需的应…

Python Web开发记录 Day12:Django part6 用户登录

名人说&#xff1a;东边日出西边雨&#xff0c;道是无晴却有晴。——刘禹锡《竹枝词》 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录 1、登录界面2、用户名密码校验3、cookie与session配置①cookie与session②配置…

【安全类书籍-3】XSS跨站脚剖析与防御

目录 内容简介 作用 下载地址 内容简介 这本书涵盖以下几点: XSS攻击原理:解释XSS是如何利用Web应用未能有效过滤用户输入的缺陷,将恶意脚本注入到网页中,当其他用户访问时被执行,实现攻击者的目的,例如窃取用户会话凭证、实施钓鱼攻击等。 XSS分类:分为存储型XSS(…

leetcode每日一题--矩阵中移动的最大次数

一.题目原型 二.思路解析 1.动态规划 这道题要求的是矩阵的最大移动次数。根据题目意思&#xff0c;从索引 0 列开始向右移动&#xff0c;每次移动一列&#xff0c;最多移动到 n - 1 列&#xff0c;也就是 n - 1次。其移动规则为&#xff1a;当前单元格可以移动到其右上方、正…

2核4g服务器够用吗?

2核4G服务器够用吗&#xff1f;够用。阿腾云以2核4G5M服务器搭建网站为例&#xff0c;5M带宽下载速度峰值可达640KB/秒&#xff0c;阿腾云以搭建网站为例&#xff0c;假设优化后平均大小为60KB&#xff0c;则5M带宽可支撑10个用户同时在1秒内打开网站&#xff0c;并发数为10&am…

SqlServer2008(R2)(一)SqlServer2008(R2)经典宝藏操作收集整理

一、常见操作 1、TRUNCATE TABLE 语句 删除表数据 TRUNCATE TABLE语句比DELET删除表中的所有行更快。从逻辑上讲&#xff0c;TRUNCATE TABLE它类似于DELETE没有WHERE子句的语句。 TRUNCATE TABLE语句从表中删除所有行&#xff0c;但表结构及其列&#xff0c;约束&#xff0c;…

​​SQLiteC/C++接口详细介绍之sqlite3类(十一)

返回目录&#xff1a;SQLite—免费开源数据库系列文章目录 上一篇&#xff1a;​​SQLiteC/C接口详细介绍之sqlite3类&#xff08;十&#xff09; 下一篇&#xff1a;​​SQLiteC/C接口详细介绍之sqlite3类&#xff08;十二&#xff09;&#xff08;未发表&#xff09; 33.sq…

flink1.18.0报错 an implicit exists from scala.Int => java.lang.Integer, but

完整报错 type mismatch;found : Int(100)required: Object Note: an implicit exists from scala.Int > java.lang.Integer, but methods inherited from Object are rendered ambiguous. This is to avoid a blanket implicit which would convert any scala.Int to a…

T1.数据库MySQL

二.SQL分类 2.1 DDL 2.1.1数据库操作 1). 查询所有数据库 show databases ; 2). 查询当前数据库 select database(); 3)创建数据库 create database [if not exists] 数据库名 [default charset 字符集] [collate 排序规则] ; 4&#xff09;删除数据库 drop database …