重学SpringBoot3-整合SSM

news2024/11/18 14:31:05

更多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 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 各自的优势。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【绿色碳中和】工作报告词频分析—绿色环保词频数据(2001-2024)

数据简介&#xff1a;随着经济的发展和工业产业的腾飞&#xff0c;人们更多的从关注经济发展走向可持续生态经济发展&#xff0c;我国也于2020年9月22日在第七十五届联合国大会上提出了碳达峰、碳中和的目标。随着碳市场的建立和逐步完善&#xff0c;越来越多的政策与绿色环保概…

Linux多进程中wait()函数学习

wait()函数是Linux/Unix系统里的一个系统级函数&#xff0c;在C语言中通过#include <sys/wait.h>包含该系统调用的头文件。 想要查看如何使用这个函数&#xff0c;可以在终端中输入&#xff1a; man 2 wait如下图&#xff1a; wait系统调用可以让父线程阻塞等待子线程的…

selenium + robotframework的运行原理

1、点击ride界面启动用例执行时&#xff0c;首先会调用脚本 2、打开pybot脚本查看内容、 3、打开robot包下面的run文件&#xff0c;我们可以看到信息 run文件内容 程序启动的入口&#xff0c; sys.agv所表达的含义是&#xff1a;sys.argv[]说白了就是一个从程序外部获取参数的桥…

2024 Mazing 3 中文版新功能介绍Windows and macOS

iMazing 3中文版(ios设备管理软件)是一款管理苹果设备的软件&#xff0c; Windows 平台上的一款帮助用户管理 IOS 手机的应用程序。iMazing中文版与苹果设备连接后&#xff0c;可以轻松传输文件&#xff0c;浏览保存信息等&#xff0c;软件功能非常强大&#xff0c;界面简洁明晰…

AST解web控制流平坦化

此代码可以解决大部分 while if else 控制流平坦化原理&#xff1a; 先将 if 语句转为 switch 语句&#xff0c;再将 switch 分支合并&#xff0c;最后删除已合并的分支&#xff08;具体看代码&#xff09; 实现效果图 首先安装依赖&#xff1a; npm install babel/parser npm…

jenkins使用公共库问题

Jenkins解决上编译解决引用问题 本地运行 把公共库创建链接到指定项目目录下即可 mklink /d /j D:\codepath\xxxx\yyyyy\tool_base D:\codepath\tool_base

Learn OpenGL 14 混合

混合 OpenGL中&#xff0c;混合(Blending)通常是实现物体透明度(Transparency)的一种技术。透明就是说一个物体&#xff08;或者其中的一部分&#xff09;不是纯色(Solid Color)的&#xff0c;它的颜色是物体本身的颜色和它背后其它物体的颜色的不同强度结合。一个有色玻璃窗是…

python自动化之(django)(2)

1、创建应用 python manage.py startapp apitest 这里还是从上节开始也就是命令行在所谓的autotest目录下来输入 然后可以清楚的看到 多了一个文件夹 2、创建视图 在views中加入test函数&#xff08;所建应用下&#xff09; from django.http import HttpResponse def tes…

【STM32定时器 TIM小总结】

STM32 TIM详解 TIM介绍定时器类型基本定时器通用定时器高级定时器常用名词时序图预分频时序计数器时序图 定时器中断配置图定时器定时 TIM介绍 定时器&#xff08;Timer&#xff09;是微控制器中的一个重要模块&#xff0c;用于生成定时和延时信号&#xff0c;以及处理定时事件…

鸿蒙Harmony应用开发—ArkTS声明式开发(容器组件:Column)

沿垂直方向布局的容器。 说明&#xff1a; 该组件从API Version 7开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 子组件 可以包含子组件。 接口 Column(value?: {space?: string | number}) 从API version 9开始&#xff0c;该接口…

复现文件上传漏洞

一、搭建upload-labs环境 将下载好的upload-labs的压缩包&#xff0c;将此压缩包解压到WWW中&#xff0c;并将名称修改为upload&#xff0c;同时也要在upload文件中建立一个upload的文件。 然后在浏览器网址栏输入&#xff1a;127.0.0.1/upload进入靶场。 第一关 选择上传文件…

一命通关差分

本章节是前缀和的延申 一命通关前缀和-CSDN博客https://blog.csdn.net/qq_74260823/article/details/136530291?spm1001.2014.3001.5501 一命通关前缀和 公交车 引入 还是利用我们在前缀和中所采用的例子——公交车。 有一辆公交车&#xff0c;一共上下了N批乘客&#xff1a…

SMART PLC 卷径计算(圈数检测+膜厚叠加法)

1、卷径计算(膜厚叠加+数值积分器应用博途PLC SCL代码) https://rxxw-control.blog.csdn.net/article/details/136719982https://rxxw-control.blog.csdn.net/article/details/1367199822、膜厚叠加法 https://rxxw-control.blog.csdn.net/article/details/128600466

[c++] std::future, std::promise, std::packaged_task, std::async

std::promise 进程间通信&#xff0c;std::packaged_task 任务封装&#xff0c;std::async 任务异步执行&#xff1b;std::future 获取结果。 1 std::promise 1.1 线程间同步 std::promise 可以用于线程间通信。 如下代码是 std::promise 中的示例代码。 std::promise - cp…

我的NPI项目之设备系统启动(九) -- 高通平台启动阶段和功能详解

接触到一个新的平台最终要的一件事莫过于搞清楚如何boot起系统&#xff0c;那就要弄清楚系统开机各阶段的具体工作内容。这里最好的指导就是高通的启动guide。 对于系统的镜像和启动阶段我已经做了简单的介绍&#xff0c;详见: 镜像和启动阶段的说明 那今天我就以电源为例&a…

树的初步了解及堆,堆的topk问题,堆排序

目录 前言 一&#xff1a;树 1.树的概念 2.树的基础概念知识 3.在树中孩子节点和父节点知一求一 4.树的表示方法 二&#xff1a;二叉树 1.二叉树的概念 2.二叉树的特性 3.满二叉树 4.完全二叉树 三&#xff1a;堆 1.堆的定义 2.堆的实现&#xff1a;数组实现…

牛客网-SQL大厂面试题-2.平均播放进度大于60%的视频类别

题目&#xff1a;平均播放进度大于60%的视频类别 DROP TABLE IF EXISTS tb_user_video_log, tb_video_info; CREATE TABLE tb_user_video_log (id INT PRIMARY KEY AUTO_INCREMENT COMMENT 自增ID,uid INT NOT NULL COMMENT 用户ID,video_id INT NOT NULL COMMENT 视频ID,start…

【小白刷leetcode】第15题

【小白刷leetcode】第15题 动手刷leetcode&#xff0c;正在准备蓝桥&#xff0c;但是本人算法能力一直是硬伤。。。所以做得一直很痛苦。但是不熟练的事情像练吉他一样&#xff0c;就需要慢速&#xff0c;多练。 题目描述 看这个题目&#xff0c;说实在看的不是很懂。索性我们直…

YOLOv9算法原理——使用可编程梯度信息学习想要学习的内容

前言 2023年1月发布YOLOv8正式版后&#xff0c;经过一年多的等待&#xff0c;YOLOv9终于面世了&#xff01;YOLO是一种利用图像全局信息进行目标检测的系统。自从2015年Joseph Redmon、Ali Farhadi等人提出了第一代模型以来&#xff0c;该领域的研究者们已经对YOLO进行了多次更…

OceanBase4.2版本 Docker 体验

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 哈喽&#xff01;大家好&#xff0c;我是【IT邦德】&#xff0c;江湖人称jeames007&#xff0c;10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】&#xff01;&#x1f61c;&am…