SpringBoot——SSMP整合案例

文章目录

  • 一. 案例实现方案分析
  • 二. 模块创建
    • 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整合案例_第1张图片

二. 模块创建

SpringBoot——SSMP整合案例_第2张图片

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

1. 导入依赖


<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.0modelVersion>
    <parent>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-parentartifactId>
        <version>2.5.4version>
    parent>

    <groupId>com.itheimagroupId>
    <artifactId>springboot_08_ssmpartifactId>
    <version>0.0.1-SNAPSHOTversion>

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

    <dependencies>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-webartifactId>
        dependency>

        <dependency>
            <groupId>com.baomidougroupId>
            <artifactId>mybatis-plus-boot-starterartifactId>
            <version>3.4.3version>
        dependency>

        <dependency>
            <groupId>com.alibabagroupId>
            <artifactId>druid-spring-boot-starterartifactId>
            <version>1.2.6version>
        dependency>

        <dependency>
            <groupId>mysqlgroupId>
            <artifactId>mysql-connector-javaartifactId>
            <scope>runtimescope>
        dependency>

        
        <dependency>
            <groupId>org.projectlombokgroupId>
            <artifactId>lombokartifactId>
        dependency>

        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-testartifactId>
            <scope>testscope>
        dependency>
    dependencies>

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

project>

2. 配置yml

SpringBoot——SSMP整合案例_第3张图片
SpringBoot——SSMP整合案例_第4张图片

3. 实体类开发

SpringBoot——SSMP整合案例_第5张图片

4. 数据层开发

SpringBoot——SSMP整合案例_第6张图片

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

SpringBoot——SSMP整合案例_第7张图片
id-type:auto 设置数据库自增策略

开启MyBatisPlus的日志
在这里插入图片描述

4.2 继承BaseMapper并指定泛型

SpringBoot——SSMP整合案例_第8张图片

4.3 数据层开发:分页功能

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

SpringBoot——SSMP整合案例_第9张图片
分页测试
SpringBoot——SSMP整合案例_第10张图片
SpringBoot——SSMP整合案例_第11张图片
SpringBoot——SSMP整合案例_第12张图片

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

使用QueryWrapper对象封装查询条件,推荐使用LambdaQueryWrapper对象,所有查询操作封装成方法调用
SpringBoot——SSMP整合案例_第13张图片
SpringBoot——SSMP整合案例_第14张图片
SpringBoot——SSMP整合案例_第15张图片

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功能是否有效
    SpringBoot——SSMP整合案例_第16张图片

2.1 接口定义

SpringBoot——SSMP整合案例_第17张图片

2.2 实现类定义

SpringBoot——SSMP整合案例_第18张图片
SpringBoot——SSMP整合案例_第19张图片
SpringBoot——SSMP整合案例_第20张图片

2.3 进行测试

SpringBoot——SSMP整合案例_第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)快速开发ServiceImpl
  • 可以在通用接口基础上做功能重载或功能追加
  • 注意重载时不要覆盖原始操作,避免原始提供的功能丢失

SpringBoot——SSMP整合案例_第22张图片

1. 接口定义

SpringBoot——SSMP整合案例_第23张图片
SpringBoot——SSMP整合案例_第24张图片

2. 实现类定义

在这里插入图片描述
实现类追加功能
SpringBoot——SSMP整合案例_第25张图片

3. 测试类定义

SpringBoot——SSMP整合案例_第26张图片

3. 表现层开发

SpringBoot——SSMP整合案例_第27张图片
SpringBoot——SSMP整合案例_第28张图片

3.1 功能测试

SpringBoot——SSMP整合案例_第29张图片
@RequestBody:用异步提交发送,他的参数通过请求体传递json数据过来

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

查询:GET
SpringBoot——SSMP整合案例_第30张图片

新增:POST

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

在这里插入图片描述

修改:PUT

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

SpringBoot——SSMP整合案例_第31张图片

删除:DELETE

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

SpringBoot——SSMP整合案例_第32张图片

条件查询

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

SpringBoot——SSMP整合案例_第33张图片

分页查询

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

SpringBoot——SSMP整合案例_第34张图片

3.2 表现层消息一致性处理

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

SpringBoot——SSMP整合案例_第35张图片
SpringBoot——SSMP整合案例_第36张图片

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

SpringBoot——SSMP整合案例_第37张图片

表现层接口统一返回值类型结果
SpringBoot——SSMP整合案例_第38张图片
SpringBoot——SSMP整合案例_第39张图片

SpringBoot——SSMP整合案例_第40张图片

3.3 业务消息一致性处理

SpringBoot——SSMP整合案例_第41张图片
SpringBoot——SSMP整合案例_第42张图片

对异常进行统一处理,出现异常后,返回指定信息
SpringBoot——SSMP整合案例_第43张图片
修改表现层返回结果的模型类,封装出现异常后对应的信息
SpringBoot——SSMP整合案例_第44张图片

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整合案例_第45张图片

后台统一管理数据消息格式
SpringBoot——SSMP整合案例_第46张图片
SpringBoot——SSMP整合案例_第47张图片
数据消息全部放在后台或者全部放在前端处理都可以,为了方便进行国际化

三. 前后端协议联调

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

在这里插入图片描述
SpringBoot——SSMP整合案例_第48张图片

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

SpringBoot——SSMP整合案例_第49张图片
SpringBoot——SSMP整合案例_第50张图片

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

SpringBoot——SSMP整合案例_第51张图片

2. 列表页

将查询数据返回到页面,利用前端数据双向绑定进行数据展示
SpringBoot——SSMP整合案例_第52张图片

3. 弹出添加窗口

SpringBoot——SSMP整合案例_第53张图片

4. 添加数据

SpringBoot——SSMP整合案例_第54张图片

5. 清除表单数据

SpringBoot——SSMP整合案例_第55张图片

SpringBoot——SSMP整合案例_第56张图片

6. 取消添加

SpringBoot——SSMP整合案例_第57张图片
SpringBoot——SSMP整合案例_第58张图片

7. 删除

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

SpringBoot——SSMP整合案例_第59张图片

8. 弹出修改窗口

SpringBoot——SSMP整合案例_第60张图片

9. 修改操作

SpringBoot——SSMP整合案例_第61张图片

10. 分页功能

页面使用el分页组件添加分页功能
SpringBoot——SSMP整合案例_第62张图片
定义分页组件需要使用的数据并将数据绑定到分页组件
SpringBoot——SSMP整合案例_第63张图片
替换查询全部功能为分页功能
SpringBoot——SSMP整合案例_第64张图片
分页查询
SpringBoot——SSMP整合案例_第65张图片

分页页码值切换
SpringBoot——SSMP整合案例_第66张图片

对查询结果进行校验,如果当前页码值大于最大页码值,使用最大页码值作为当前页码值重新查询
SpringBoot——SSMP整合案例_第67张图片

11. 条件查询功能

SpringBoot——SSMP整合案例_第68张图片
页面数据模型绑定
SpringBoot——SSMP整合案例_第69张图片
组织数据成为get请求发送的数据
SpringBoot——SSMP整合案例_第70张图片
Controller接收参数

SpringBoot——SSMP整合案例_第71张图片

业务层接口功能开发
SpringBoot——SSMP整合案例_第72张图片
页面回显数据
SpringBoot——SSMP整合案例_第73张图片

你可能感兴趣的:(SpringBoot,spring,boot,java,spring)