SpringBoot整合SSM

[复制链接]
发表于 10 小时前 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
用 SpringBoot 搭一个能查数据库的完整工程,是每个后端新手都要过的一道坎。本文以「部门(dept)单表查询」为例,按导入依赖、写 yml 配置、写 pojo 与 mapper、补全 service 与 controller 的顺序,把每一步的代码都原样贴出来,最后跑测试类、启动项目验证查询结果。照着做一遍,SSM 整合的脉络就清楚了。

整合前的整体步骤

话不多说,直接开工。要完成一次 SpringBoot 版 SSM 整合,整体就下面五步,代码其实是跟着这一步步往下写的:


  • 导入依赖
  • 创建 yml 配置文件
  • 写 dao 层
  • 准备静态页面
  • 写测试类验证


导入依赖与版本搭配

第一个动作是建好 Maven 工程并引入依赖。这里用的是 spring-boot-starter-parent 3.3.4,JDK 17 编译,Web、MySQL 驱动、JDBC、MyBatis-Plus、Druid 连接池、测试与 Lombok 一并加进来,完整 pom 如下:
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3.          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4.          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <!--    <parent>-->
  6. <!--        <artifactId>springdemo</artifactId>-->
  7. <!--        <groupId>org.example</groupId>-->
  8. <!--        <version>1.0-SNAPSHOT</version>-->
  9. <!--    </parent>-->
  10.     <modelVersion>4.0.0</modelVersion>
  11.     <artifactId>boot</artifactId>
  12.     <properties>
  13.         <maven.compiler.source>17</maven.compiler.source>
  14.         <maven.compiler.target>17</maven.compiler.target>
  15.     </properties>
  16.     <!--    引入SpringBoot父级依赖  -->
  17.     <parent>
  18.         <groupId>org.springframework.boot</groupId>
  19.         <artifactId>spring-boot-starter-parent</artifactId>
  20.         <version>3.3.4</version>
  21.     </parent>
  22.     <dependencies>
  23.         <!--       SpringBoot 整合springmvc依赖     -->
  24.         <dependency>
  25.             <groupId>org.springframework.boot</groupId>
  26.             <artifactId>spring-boot-starter-web</artifactId>
  27.         </dependency>
  28. <!--        mysql   -->
  29.         <dependency>
  30.             <groupId>mysql</groupId>
  31.             <artifactId>mysql-connector-java</artifactId>
  32.             <version>8.0.33</version>
  33.         </dependency>
  34. <!--    整合jdbc    -->
  35.         <dependency>
  36.             <groupId>org.springframework.boot</groupId>
  37.             <artifactId>spring-boot-starter-jdbc</artifactId>
  38.             <version>2.7.3</version>
  39.         </dependency>
  40. <!--       整合mybatis     -->
  41.         <dependency>
  42.             <groupId>com.baomidou</groupId>
  43.             <artifactId>mybatis-plus-spring-boot3-starter</artifactId>
  44.             <version>3.5.7</version>
  45.         </dependency>
  46. <!--      整合druid     -->
  47.         <dependency>
  48.             <groupId>com.alibaba</groupId>
  49.             <artifactId>druid-spring-boot-3-starter</artifactId>
  50.             <version>1.2.23</version>
  51.         </dependency>
  52. <!--        junit测试 +springboot    -->
  53.         <dependency>
  54.             <groupId>org.springframework.boot</groupId>
  55.             <artifactId>spring-boot-starter-test</artifactId>
  56.             <version>3.3.5</version>
  57.             <scope>test </scope>
  58.         </dependency>
  59. <!--        lombok     -->
  60.         <dependency>
  61.             <groupId>org.projectlombok</groupId>
  62.             <artifactId>lombok</artifactId>
  63.             <version>1.18.26</version>
  64.         </dependency>
  65.         <!-- JUnit 4 测试框架依赖,用于编写和运行单元测试 -->
  66.         <dependency>
  67.             <groupId>junit</groupId>
  68.             <artifactId>junit</artifactId>
  69.             <scope>test</scope>
  70.         </dependency>
  71.     </dependencies>
  72. </project>
复制代码

yml 里配置 MySQL 数据源

第二步写 application.yml:SpringBoot 默认端口 8080,数据源指定 MySQL 的 com.mysql.jdbc.Driver,连接的是本地库 db1,账号 root、密码 1234,连接池换成 Druid 的 com.alibaba.druid.pool.DruidDataSource。
  1. # 启动端口号
  2. server:
  3.   port: 8080
  4. spring:
  5.   # 整合 mysql数据源 连接池
  6.   datasource:
  7.     driver-class-name: com.mysql.jdbc.Driver
  8.     url: jdbc:mysql:///db1
  9.     username: root
  10.     password: 1234
  11.     type: com.alibaba.druid.pool.DruidDataSource
复制代码

pojo 与 mapper 的写法

业务代码只有两层。pojo 层建一个 Dept 类,字段是 id、dname、loc,加 @Data 让 Lombok 自动生成 getter/setter/toString:
  1. package com.it.pojo;
  2. import lombok.Data;
  3. @Data
  4. public class Dept {
  5.     private int id;
  6.     private String dname;
  7.     private String loc;
  8. }
复制代码

mapper 层用注解方式写 SQL,接口上加 @Mapper 交给容器做动态代理,方法上写一条 @Select 按 id 查部门:
  1. package com.it.mapper;
  2. import com.it.pojo.Dept;
  3. import org.apache.ibatis.annotations.Mapper;
  4. import org.apache.ibatis.annotations.Select;
  5. //动态扫描代理
  6. @Mapper
  7. public interface DeptMapper {
  8.     @Select("select * from dept where id=#{id}")
  9.     public Dept findById(int id);
  10. }
复制代码

先用测试类验证查询

在动手写 controller 之前,建议先用一个测试类把 mapper 跑通,确认 SQL 和数据源没问题,免得后面一层层排查。加上 @SpringBootTest 启动容器,注入 DeptMapper 后调用 findById(1):
  1. package com.it.mapper;
  2. import org.junit.jupiter.api.Test;
  3. import org.springframework.beans.factory.annotation.Autowired;
  4. import org.springframework.boot.test.context.SpringBootTest;
  5. @SpringBootTest
  6. class DeptMapperTest {
  7.     @Autowired
  8.     public DeptMapper deptMapper;
  9.     @Test
  10.     void findById() {
  11.        System.out.println(deptMapper.findById(1));
  12.     }
  13. }
复制代码



service 层与 impl 实现类

service 接口只定义一个 findById,把 mapper 的调用包一层,方便以后换实现类:
  1. package com.it.service;
  2. import com.it.pojo.Dept;
  3. public interface DeptService {
  4.     public Dept findById(int id);
  5. }
复制代码

实现类 DeptServiceImpl 加 @Service 注解,用 @Autowired 注入 mapper,重写方法后直接返回查询结果:
  1. package com.it.service.impl;
  2. import com.it.mapper.DeptMapper;
  3. import com.it.pojo.Dept;
  4. import com.it.service.DeptService;
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.stereotype.Service;
  7. @Service
  8. public class DeptServiceImpl implements DeptService {
  9.     @Autowired
  10.     public DeptMapper deptMapper;
  11.     @Override
  12.     public Dept findById(int id) {
  13.         return deptMapper.findById(id);
  14.     }
  15. }
复制代码

controller 暴露一个查询接口

最后到 controller 层。这里用的是 @Controller 加 @ResponseBody,一个方法就相当于一个 servlet,对外暴露 /getList 接口,接收 id 参数,查询后打印并返回:
  1. package com.it.controller;
  2. import com.it.pojo.Dept;
  3. import com.it.service.DeptService;
  4. import org.springframework.beans.factory.annotation.Autowired;
  5. import org.springframework.stereotype.Controller;
  6. import org.springframework.web.bind.annotation.RequestMapping;
  7. import org.springframework.web.bind.annotation.ResponseBody;
  8. @Controller
  9. public class DeptController {
  10.     @Autowired
  11.     private DeptService  deptService;
  12. //    一个方法就是一个servlet
  13.     @RequestMapping("/getList")
  14.     @ResponseBody
  15.     public Dept getList(int id){
  16.         Dept dept = deptService.findById(id);
  17.         System.out.println(dept);
  18.         return dept;
  19.     }
  20. }
复制代码

启动项目查看查询结果

全部代码写完后启动项目,访问 8080 端口对应的接口即可拿到 JSON 数据,控制台同时打印出查到的部门对象。项目结构的实际效果见下图。



这套流程走下来,整合的先后顺序就是:配置能连库 → mapper 能查 → 测试类能跑通 → service 包一层 → controller 对外暴露。

编辑提示:把 pom 和 yml 抄进自己工程时先确认 MySQL 库名、账号密码与你本地一致,跑通 mapper 测试再往下写,能省掉大半排查时间。
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表