文章目录

  • ​​一. 案例实现方案分析​​
  • ​​二. 模块创建​​
  • ​​1. 导入依赖​​
  • ​​2. 配置yml​​
  • ​​3. 实体类开发​​
  • ​​4. 数据层开发​​
  • ​​4.1 配置数据源与MyBatisPlus对应的基础配置(id生成策略使用数据库自增策略)​​
  • ​​4.2 继承BaseMapper并指定泛型​​
  • ​​4.3 数据层开发:分页功能​​
  • ​​4.4 数据层开发:条件查询功能​​
  • ​​4.5 进行测试​​
  • ​​2. 业务层开发​​
  • ​​2.1 接口定义​​
  • ​​2.2 实现类定义​​
  • ​​2.3 进行测试​​
  • ​​2.4 业务层开发—快速开发(使用IService)​​
  • ​​1. 接口定义​​
  • ​​2. 实现类定义​​
  • ​​3. 测试类定义​​
  • ​​3. 表现层开发​​
  • ​​3.1 功能测试​​
  • ​​3.2 表现层消息一致性处理​​
  • ​​3.3 业务消息一致性处理​​
  • ​​三. 前后端协议联调​​
  • ​​1. 前端发送异步请求,调用后端接口​​
  • ​​2. 列表页​​
  • ​​3. 弹出添加窗口​​
  • ​​4. 添加数据​​
  • ​​5. 清除表单数据​​
  • ​​6. 取消添加​​
  • ​​7. 删除​​
  • ​​8. 弹出修改窗口​​
  • ​​9. 修改操作​​
  • ​​10. 分页功能​​
  • ​​11. 条件查询功能​​

一. 案例实现方案分析

SpringBoot——SSMP整合案例_测试数据

二. 模块创建

SpringBoot——SSMP整合案例_spring_02

  1. 勾选SpringMVC与MySQL坐标
  2. 修改配置文件为yml格式
  3. 设置端口为80方便访问

1. 导入依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.4</version>
</parent>

<groupId>com.itheima</groupId>
<artifactId>springboot_08_ssmp</artifactId>
<version>0.0.1-SNAPSHOT</version>

<properties>
<java.version>1.8</java.version>
</properties>

<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.3</version>
</dependency>

<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.6</version>
</dependency>

<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>

<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>

</project>

2. 配置yml

SpringBoot——SSMP整合案例_spring_03


SpringBoot——SSMP整合案例_java_04

3. 实体类开发

SpringBoot——SSMP整合案例_测试数据_05

4. 数据层开发

SpringBoot——SSMP整合案例_spring_06

4.1 配置数据源与MyBatisPlus对应的基础配置(id生成策略使用数据库自增策略)

SpringBoot——SSMP整合案例_spring_07


id-type:auto 设置数据库自增策略开启MyBatisPlus的日志

SpringBoot——SSMP整合案例_spring_08

4.2 继承BaseMapper并指定泛型

SpringBoot——SSMP整合案例_java_09

4.3 数据层开发:分页功能

分页操作是在MyBatisPlus的常规操作基础上增强得到,内部是动态的拼写SQL语句,因此需要增强对应的功能,使用MyBatisPlus拦截器实现

SpringBoot——SSMP整合案例_spring boot_10


分页测试

SpringBoot——SSMP整合案例_spring boot_11


SpringBoot——SSMP整合案例_spring_12


SpringBoot——SSMP整合案例_java_13

4.4 数据层开发:条件查询功能

使用QueryWrapper对象封装查询条件,推荐使用LambdaQueryWrapper对象,所有查询操作封装成方法调用

SpringBoot——SSMP整合案例_spring_14


SpringBoot——SSMP整合案例_Test_15


SpringBoot——SSMP整合案例_java_16

4.5 进行测试

package com.itheima.dao;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.itheima.domain.Book;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
public class BookDaoTestCase {

@Autowired
private BookDao bookDao;

@Test
void testGetById(){
System.out.println(bookDao.selectById(1));
}

@Test
void testSave(){
Book book = new Book();
book.setType("测试数据aaa");
book.setName("测试数据aaa");
book.setDescription("测试数据aaa");
bookDao.insert(book);
}

@Test
void testUpdate(){
Book book = new Book();
book.setId(4);
book.setType("测试数据abcdefg");
book.setName("测试数据123");
book.setDescription("测试数据123");
bookDao.updateById(book);
}

@Test
void testDelete(){
bookDao.deleteById(16);
}

@Test
void testGetAll(){
bookDao.selectList(null);
}

@Test
void testGetPage(){
IPage page = new Page(2,5);
bookDao.selectPage(page, null);
System.out.println(page.getCurrent());
System.out.println(page.getSize());
System.out.println(page.getTotal());
System.out.println(page.getPages());
System.out.println(page.getRecords());
}

@Test
void testGetBy(){
QueryWrapper<Book> qw = new QueryWrapper<>();
qw.like("name","Spring");
bookDao.selectList(qw);
}

@Test
void testGetBy2(){
String name = "1";
LambdaQueryWrapper<Book> lqw = new LambdaQueryWrapper<Book>();
//if(name != null) lqw.like(Book::getName,name);
lqw.like(name != null,Book::getName,name);
bookDao.selectList(lqw);
}
}

2. 业务层开发

  • Service接口名称定义成业务名称,并与Dao接口名称进行区分
  • 制作测试类测试Service功能是否有效

2.1 接口定义

SpringBoot——SSMP整合案例_测试数据_17

2.2 实现类定义

SpringBoot——SSMP整合案例_spring_18


SpringBoot——SSMP整合案例_测试数据_19


SpringBoot——SSMP整合案例_spring boot_20

2.3 进行测试

SpringBoot——SSMP整合案例_java_21

package com.itheima.service;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.itheima.domain.Book;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
public class BookServiceTestCase {

@Autowired
private BookService bookService;

@Test
void testGetById(){
System.out.println(bookService.getById(4));
}

@Test
void testSave(){
Book book = new Book();
book.setType("测试数据123");
book.setName("测试数据123");
book.setDescription("测试数据123");
bookService.save(book);
}

@Test
void testUpdate(){
Book book = new Book();
book.setId(18);
book.setType("测试数据abcdefg");
book.setName("测试数据123");
book.setDescription("测试数据123");
bookService.update(book);
}

@Test
void testDelete(){
bookService.delete(16);
}

@Test
void testGetAll(){
bookService.getAll();
}

@Test
void testGetPage(){
IPage<Book> page = bookService.getPage(2, 5);
System.out.println(page.getCurrent());
System.out.println(page.getSize());
System.out.println(page.getTotal());
System.out.println(page.getPages());
System.out.println(page.getRecords());
}

}

2.4 业务层开发—快速开发(使用IService)

  • 使用通用接口(ISerivce)快速开发Service
  • 使用通用实现类(ServiceImpl<M,T>)快速开发ServiceImpl
  • 可以在通用接口基础上做功能重载或功能追加
  • 注意重载时不要覆盖原始操作,避免原始提供的功能丢失

SpringBoot——SSMP整合案例_测试数据_22

1. 接口定义

SpringBoot——SSMP整合案例_spring boot_23


SpringBoot——SSMP整合案例_Test_24

2. 实现类定义

SpringBoot——SSMP整合案例_Test_25


实现类追加功能

SpringBoot——SSMP整合案例_java_26

3. 测试类定义

SpringBoot——SSMP整合案例_Test_27

3. 表现层开发

SpringBoot——SSMP整合案例_java_28


SpringBoot——SSMP整合案例_测试数据_29

3.1 功能测试

SpringBoot——SSMP整合案例_spring_30


@RequestBody:用异步提交发送,他的参数通过请求体传递json数据过来

@PathVariable:用路径变量来传递参数(http://localhost/books/2)

查询:GET

SpringBoot——SSMP整合案例_spring boot_31

新增:POST

@PostMapping
public Boolean save(@RequestBody Book book){
return bookService.save(book);
}

SpringBoot——SSMP整合案例_spring boot_32

修改:PUT

@PutMapping
public Boolean update(@RequestBody Book book){
return bookService.modify(book);
}

SpringBoot——SSMP整合案例_java_33

删除:DELETE

@DeleteMapping("{id}")
public Boolean delete(@PathVariable Integer id){
return bookService.delete(id);
}

SpringBoot——SSMP整合案例_spring_34

条件查询

@GetMapping("{id}")
public Book getById(@PathVariable Integer id){
return bookService.getById(id);
}

SpringBoot——SSMP整合案例_java_35

分页查询

@GetMapping("{currentPage}/{pageSize}")
public IPage<Book> getPage(@PathVariable int currentPage,@PathVariable int pageSize){
return bookService.getPage(currentPage,pageSize, null);
}

SpringBoot——SSMP整合案例_java_36

3.2 表现层消息一致性处理

  • 设计统一的返回值结果类型便于前端开发读取数据
  • 返回值结果类型可以根据需求自行设定,没有固定格式
  • 返回值结果模型类用于后端与前端进行数据格式统一,也称为前
    后端数据协议

SpringBoot——SSMP整合案例_spring_37


SpringBoot——SSMP整合案例_Test_38

设计表现层返回结果的模型类,用于后端与前端进行数据格式统一,也称为前后端数据协议

SpringBoot——SSMP整合案例_Test_39

表现层接口统一返回值类型结果

SpringBoot——SSMP整合案例_测试数据_40


SpringBoot——SSMP整合案例_spring boot_41

SpringBoot——SSMP整合案例_Test_42

3.3 业务消息一致性处理

SpringBoot——SSMP整合案例_Test_43


SpringBoot——SSMP整合案例_spring_44

对异常进行统一处理,出现异常后,返回指定信息

SpringBoot——SSMP整合案例_java_45


修改表现层返回结果的模型类,封装出现异常后对应的信息

SpringBoot——SSMP整合案例_java_46

package com.itheima.controller.utils;

import lombok.Data;

@Data
public class R {
private Boolean flag;
private Object data;
private String msg;

public R(){}

public R(Boolean flag){
this.flag = flag;
}

public R(Boolean flag,Object data){
this.flag = flag;
this.data = data;
}

public R(Boolean flag,String msg){
this.flag = flag;
this.msg = msg;
}

public R(String msg){
this.flag = false;
this.msg = msg;
}
}

SpringBoot——SSMP整合案例_spring boot_47

后台统一管理数据消息格式

SpringBoot——SSMP整合案例_Test_48


SpringBoot——SSMP整合案例_Test_49


数据消息全部放在后台或者全部放在前端处理都可以,为了方便进行国际化

三. 前后端协议联调

前后端分离开发:页面开发放在前端服务器上面的
我们这里放在单体服务器上

SpringBoot——SSMP整合案例_测试数据_50


SpringBoot——SSMP整合案例_测试数据_51

1. 前端发送异步请求,调用后端接口

SpringBoot——SSMP整合案例_测试数据_52


SpringBoot——SSMP整合案例_java_53

  • 单体项目中页面放置在resources/static目录下
  • created钩子函数用于初始化页面时发起调用
  • 页面使用axios发送异步请求获取数据后确认前后端是否联通

SpringBoot——SSMP整合案例_spring_54

2. 列表页

将查询数据返回到页面,利用前端数据双向绑定进行数据展示

SpringBoot——SSMP整合案例_Test_55

3. 弹出添加窗口

SpringBoot——SSMP整合案例_Test_56

4. 添加数据

SpringBoot——SSMP整合案例_java_57

5. 清除表单数据

SpringBoot——SSMP整合案例_测试数据_58

SpringBoot——SSMP整合案例_spring boot_59

6. 取消添加

SpringBoot——SSMP整合案例_java_60


SpringBoot——SSMP整合案例_Test_61

7. 删除

  1. 请求方式使用Delete调用后台对应操作
  2. 删除操作需要传递当前行数据对应的id值到后台
  3. 删除操作结束后动态刷新页面加载数据
  4. 根据操作结果不同,显示对应的提示信息
  5. 删除操作前弹出提示框避免误操作

SpringBoot——SSMP整合案例_Test_62

8. 弹出修改窗口

SpringBoot——SSMP整合案例_spring boot_63

9. 修改操作

SpringBoot——SSMP整合案例_java_64

10. 分页功能

页面使用el分页组件添加分页功能

SpringBoot——SSMP整合案例_spring boot_65


定义分页组件需要使用的数据并将数据绑定到分页组件

SpringBoot——SSMP整合案例_java_66


替换查询全部功能为分页功能

SpringBoot——SSMP整合案例_Test_67


分页查询

SpringBoot——SSMP整合案例_Test_68

分页页码值切换

SpringBoot——SSMP整合案例_spring boot_69

对查询结果进行校验,如果当前页码值大于最大页码值,使用最大页码值作为当前页码值重新查询

SpringBoot——SSMP整合案例_测试数据_70

11. 条件查询功能

SpringBoot——SSMP整合案例_测试数据_71


页面数据模型绑定

SpringBoot——SSMP整合案例_spring boot_72


组织数据成为get请求发送的数据

SpringBoot——SSMP整合案例_Test_73


Controller接收参数

SpringBoot——SSMP整合案例_java_74

业务层接口功能开发

SpringBoot——SSMP整合案例_spring boot_75


页面回显数据

SpringBoot——SSMP整合案例_java_76