ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

最新Springboot详解和书管项目训练

2022-01-01 14:31:14  阅读:194  来源: 互联网

标签:Springboot img Book 书管 book 防盗链 import public 详解


文章目录

SpringBoot入门案例

SpringBoot入门案例 (idea联网版)

  1. 建立一个空项目

image-20211224183844541

  1. 确定当前Maven的版本

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pSplzkn8-1641018122074)(https://cdn.jsdelivr.net/gh/1wenjinjie/picture/img/202112241842333.png)]

  1. 创建模块

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zjz6ptZY-1641018122075)(https://cdn.jsdelivr.net/gh/1wenjinjie/picture/img/202112241843484.png)]

选择Spring Initializr,选择jdk版本,其他都不用动,选择当前模块使用的技术集

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-urhwWpf0-1641018122076)(https://cdn.jsdelivr.net/gh/1wenjinjie/picture/img/202112241849295.png)]

image-20211224185118861

选择Spring web

  1. 界面如下

image-20211224191249000

  1. 写一个简单的类。然后运行,开发控制器类
package controller;


import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

//Rest模式
@RestController
@RequestMapping("/books")
public class BookController {
        @GetMapping 
        public String getById(){
            System.out.println("spingboot is runing..");
            return "springboot is running";
    }

}

image-20211224193849945

运行成功

  1. 在网页中打开

image-20211224193745524

到目前为止一个最简单的boot程序已经完成

这两个文件就组成了整体的结构

image-20211224194115008

image-20211224195404344

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SWX1q2IM-1641018122079)(https://cdn.jsdelivr.net/gh/1wenjinjie/picture/img/202112241941048.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QOQayqFm-1641018122080)(https://cdn.jsdelivr.net/gh/1wenjinjie/picture/img/202112241954738.png)]

springboot对比spring的优点:就只需要写一个控制类。

最重要的一点是springboot需要联网操作

image-20211224195238497

小结

image-20211224195134315

  1. 开发SpringBoot程序可以根据向导进行联网快速制作
  2. SpringBoot程序需要基于JDK8进行制作
  3. SpringBoot程序中需要使用何种功能通过勾选选择技术
  4. 运行SpringBoot程序通过运行Application程序入口进行

SpringBoot创建 (idea不能联网,官网创建)

  1. 搜索spring官网

  2. 拉到最下面,点击Spring Initializr

image-20211225123520248

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9c2wvHK8-1641018122082)(https://cdn.jsdelivr.net/gh/1wenjinjie/picture/img/202112251236324.png)]

  1. 填完后,点击添加依赖包,搜索web

image-20211225123738720

  1. 点击下载springboot工程

image-20211225123943465

image-20211225124059734

  1. 把压缩目录复制到对应idea springboot目录中

image-20211225124154049

  1. 在idea中将工程导入其中

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-z11IiGRT-1641018122084)(https://cdn.jsdelivr.net/gh/1wenjinjie/picture/img/202112251244884.png)]

image-20211225124423245

image-20211225124451665

  1. 创建完之后,我们将之前的control包复制下来,查看是否运行成功,出现springboot is running…2

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HXYzp9Gg-1641018122085)(https://cdn.jsdelivr.net/gh/1wenjinjie/picture/img/202112251459375.png)]

  1. 运行完后,表示成功

image-20211225150019538

image-20211225150037515


springboot创建 (阿里云版)

  1. 点击新创建项目

image-20211225150815736

image-20211225150937133

image-20211225151101588

  1. 测试

image-20211225153743427

image-20211225153813832

总结:国内访问spring官网可能回很慢,可以使用阿里云的网站,速度回变快


隐藏文件或文件夹

  1. 找到file types

image-20211227181141426

  1. 文件中.mvn就消失了

image-20211227181239475

image-20211227181648001


入门案例解析:parent

SpringBoot简介

  • SpringBoot是由Pivotal团队提供的全新框架,其设计目的是用来简化Spring应用的初始搭建以及开发过程
  • Spring缺点
  1. 依赖设置繁琐
  2. 配置繁琐
  • SpringBoot程序优点
  1. 起步依赖
  2. 自动配置
  3. 辅助功能

小结:

  1. 开发SpringBoot程序要继承spring-boot-starter-parent
  2. spring-boot-starter-parent中定义了若干个依赖管理
  3. 继承parent模块可以避免多个依赖使用相同技术时出现依赖版本冲突
  4. 继承parent的形式也可以采用引入依赖的形式实现效果(阿里云版)

starter

  • starter是springboot中常见项目名称,定义了当前项目使用的所有依赖坐标,以达到减少依赖配置的目的
  • aprent所有SpringBoot项目要继承的项目,定义了若干个坐标版本号,以达到减少依赖冲突的目的
  • spring-boot-starter-parent各版本间存在着诸多坐标版本不同

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tnHSRY7x-1641018122089)(https://cdn.jsdelivr.net/gh/1wenjinjie/picture/img/202112271900273.png)]


引导类

  • 启动方式
@SpringBootApplication
public class SpringBoot0101QuickstartApplication {

    public static void main(String[] args) {

        ConfigurableApplicationContext ctx = SpringApplication.run(SpringBoot0101QuickstartApplication.class, args);
        BookController bean=ctx.getBean(BookController.class);
        System.out.println("bean====>"+bean);
    }

}
  • SpringBoot的引导类是Boot工程的执行入口,运行main方法就可以启动项目
  • SpringBoot工程运行后初始化Spring容器,扫描引导类所在包加载bean

内嵌tomcat

变更依赖包

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aTm6JhTy-1641018122090)(https://cdn.jsdelivr.net/gh/1wenjinjie/picture/img/202112271936721.png)]

小结:

  1. 内嵌Tomcat服务器是SpringBoot辅助之一
  2. 内嵌Tomcat工作原理是将Tomcat服务器作为对象运行,并将对象交给Spring容器管理
  3. 变更内嵌服务器思想是取出现在服务器,添加全新服务器

复制模块

  • 原则
    • 保留工程继承结构
    • 抹掉原始工程痕迹
  1. 复制目录
  2. 修改pom.xml文件中的artifactId

image-20211227194806729

  1. 导入项目

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EG7YOguZ-1641018122091)(https://cdn.jsdelivr.net/gh/1wenjinjie/picture/img/202112271949920.png)]

  1. 修改

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8rCTOEfo-1641018122091)(https://cdn.jsdelivr.net/gh/1wenjinjie/picture/img/202112271954490.png)]

小结

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cGAxbRvJ-1641018122092)(https://cdn.jsdelivr.net/gh/1wenjinjie/picture/img/202112272012263.png)]


基础配置

  • 属性配置
  1. 找到application.properties文件。application.properties是springBoot默认文件,通过键值对配置对应属性

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rIjNll0g-1641018122092)(https://cdn.jsdelivr.net/gh/1wenjinjie/picture/img/202112272014305.png)]

  1. 修改端口

image-20211227201630473

  1. 查看

image-20211227201656702

  • springboot提供了多种属性配置方式
  1. application.properties
server.port=80
  1. application.yml
server:
	port:81
  1. application.yaml
server:
	port:82

属性提示消失解决方案

  1. 打开项目结构

image-20211227204843846


yaml数据格式

  • yaml是一种数据序列格式
  • 优点
  1. 容易阅读
  2. 容易与脚本交互
  3. 以数据为核心,重数据轻格式
  • YAML文件扩展名

1 .yml(主流)

2 .yaml

小结:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-841zgKgS-1641018122094)(https://cdn.jsdelivr.net/gh/1wenjinjie/picture/img/202112280908729.png)]


yml读取数据

  • 使用@value读取单一数据,属性名引用方式:${一级属性名,二级属性名…}

image-20211228091335813


yaml文件中的变量引用

  • 引用格式读取数据

image-20211228092029720

image-20211228092134017


读取yaml全部属性数据

  • 封装全部数据到Environment对象

image-20211228094139987


读取yaml引用类型属性 数据

  • 自定义对象封装指定数据

image-20211228095728868

  • 例如

image-20211228095828542

  • 创建类

image-20211228095854032

  • 写类

image-20211228095923721

package com.itheima.springboot_01_02quickstart;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

//1.定义数据模型封装yaml文件对应的数据
//2.定义spring管控的bean
@Component
//3.指定加载的数据
@ConfigurationProperties(prefix = "datasource")
public class MyDataSource {
    private String driver;
    private String url;
    private String username;
    private String password;

    public String getDriver() {
        return driver;
    }

    public void setDriver(String driver) {
        this.driver = driver;
    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "MyDataSource{" +
                "driver='" + driver + '\'' +
                ", url='" + url + '\'' +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}
// datasource:
//         driver: com.mysql.jdbc.Driver
//         url: jdbc:mysql://localhost/springboot_db
//         username: root
//         password: root666
  • 在control类中加载,并打印

image-20211228100015786

小结:

  1. 使用@ConfigurationProperties注解绑定配置信息到封装类
  2. 封装类需要定义为Spring管理的bean,否则无法进行属性注入

SpringBoot整合JUnit

  • 创建新模块

image-20211228101246074

  • 找类,该类可以整合junit

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4QbAMier-1641018122098)(https://cdn.jsdelivr.net/gh/1wenjinjie/picture/img/202112281011554.png)]

image-20211228111641553

小结:

image-20211228111725278

  • springboot中的classes

image-20211228112834135

小结:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OXP1Sufh-1641018122099)(https://cdn.jsdelivr.net/gh/1wenjinjie/picture/img/202112281129590.png)]


SpringBoot整合MyBatis

  1. 需要勾选依赖项

image-20211228113226328

  1. 将配置文件改为.yml结尾

image-20211228114855643

  1. 写配置文件连接数据库

image-20211228114920514

  1. 建立数据层和实体类
  • 实体类

image-20211228143107497

package com.itheima.domain;

public class Book {
    private Integer id;
    private String type;
    private String name;
    private String description;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    @Override
    public String toString() {
        return "Book{" +
                "id=" + id +
                ", type='" + type + '\'' +
                ", name='" + name + '\'' +
                ", description='" + description + '\'' +
                '}';
    }
}

  • 数据层接口
package com.itheima.dao;

import com.itheima.domain.Book;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;


@Mapper
public interface BookDao {
   @Select("select * from tbl_book where id= #{id}")
    public Book getById(Integer id);
}

  • 测试类
package com.itheima.springboot_05_mybitis;

import com.itheima.dao.BookDao;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class Springboot05MybitisApplicationTests {

    @Autowired
    private BookDao bookDao;

    @Test
    void contextLoads() {
        System.out.println(bookDao.getById(1));
    }

}

image-20211228150251602

小结:

  1. 勾选MyBatis技术,也就是导入MyBatis对应的starter
  2. 数据库连接相关信息转换成配置
  3. 数据库SQL映射需要添加@Mapper被容器识别到

SpringBoot整合MyBatis常见错误

  1. 如果将版本降低

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XJbxMwgS-1641018122101)(https://cdn.jsdelivr.net/gh/1wenjinjie/picture/img/202112281524283.png)]


SpringBoot整合mybatis plus

  1. 使用阿里云服务器

image-20211228153127003

  1. 通过官网创建
  • 先创建普通的项目(需要勾选1个mysql driver)

  • 然后去maven官网找

image-20211228153616625

  • 添加依赖

image-20211228153807312

  • 在.yml文件中设置Mp相关配置
#2.??????
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/ssm_db?serverTimezone=UTC
    username: root
    password: 123456
    #设置Mp相关的配置
mybatis-plus:
  global-config:
    db-config:
      table-prefix: tbl_


  • 定义数据层接口与映射配置,继承BaseMapper

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9I4OCGDi-1641018122103)(https://cdn.jsdelivr.net/gh/1wenjinjie/picture/img/202112281548496.png)]

小结:

image-20211228154935337


整合Druid

  1. 创建项目,和之前一样勾选两个

  2. 导入依赖包坐标

image-20211228155429536

  1. 配置druid在application.yml(两种方式)

image-20211228162325450

小结:

  1. 整合Druid需要导入Druid对应的starter
  2. 根据Druid提供的配置方式进行配置
  3. 整合第三方技术通用方式
  • 导入对应的starter
  • 根据提供的配置格式,配置非默认值对应的配置项

SSMP整合案例制作分析

总体:

image-20220101141746827

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FsTVsv62-1641018122104)(https://cdn.jsdelivr.net/gh/1wenjinjie/picture/img/202201011419774.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ub5xajn7-1641018122104)(https://cdn.jsdelivr.net/gh/1wenjinjie/picture/img/202112281639068.png)]

  • SSMP案例制作流程解析
  1. 先开发基础CRUD功能,做一层测一层
  2. 调通页面,确认异步提交成功后,制作所有功能
  3. 添加分页功能与查询功能

模块创建

  • 创建项目

image-20211228164557962

  1. 修改pom.xml文件

image-20211228164752301

  1. 在pom.xml文件中手动添加德鲁伊和mybatis plus依赖包

image-20211228165143680

  1. 修改配置文件为.yml

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yQEIz9nF-1641018122105)(https://cdn.jsdelivr.net/gh/1wenjinjie/picture/img/202112281654265.png)]


实体类快速开发(lombok)

  • Lombok,一个Java类库,提供了一组注解,简化POJO实体类开发

  • 如何使用

  1. 在pom.xml中添加lombok依赖包

image-20211228171633020

  1. 在POJO实体类添加@Data注解,,提供了get/set方法,toString方法,hashode方法,equals方法等

image-20211228171845749


数据层标准开发

  1. 配置.yml文件

image-20211228185801634

  1. 用Mp形式创建接口,继承于BaseMapper

image-20211228191346213

  1. 在test目录下创建测试类
package com.itheima.springboot_08_ssmp.dao;


import com.itheima.dao.BookDao;
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 BookDaoTest {

    @Autowired
    private BookDao bookDao;


    @Test
    void testGetId(){
        System.out.println(bookDao.selectById(5));
    }
    @Test
    void testSave(){
        Book book = new Book();
        book.setType("测试数据123");
        book.setName("测试数据123");
        book.setDescrption("测试数据123");
        bookDao.insert(book);
    }
    @Test
    void testUpdate(){
        Book book = new Book();
        book.setId(9);
        book.setType("测试数据123aaa");
        book.setName("测试数据123");
        book.setDescrption("测试数据123");
        bookDao.updateById(book);
    }
    @Test
    void testDelete(){
    bookDao.deleteById(10);
    }
    @Test
    void testGetAll(){

        System.out.println(  bookDao.selectList(null));
    }
    @Test
    void testGetPage(){

    }
    @Test
    void testGetBy(){}
}

小结:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LOfvmT7A-1641018122107)(https://cdn.jsdelivr.net/gh/1wenjinjie/picture/img/202112281926068.png)]

image-20211228192650245

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-A5sJfm1D-1641018122108)(https://cdn.jsdelivr.net/gh/1wenjinjie/picture/img/202112281927423.png)]

  • 手工导入starter坐标两个 mybatisplus和druid
  • 配置数据源与MyBatis-plus对应配置
  • 开发Dao接口 继承与BaseMapper
  • 制作测试类测试Dao功能是否有效

开启MP运行日志

  1. 在.yml文件下添加

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rn2QZYK7-1641018122108)(https://cdn.jsdelivr.net/gh/1wenjinjie/picture/img/202112281931859.png)]

image-20211228193228388

image-20211228193417942


分页查询

  • 测试方法
  @Test
    void testGetPage(){
        IPage page = new Page(2,5);
        bookDao.selectPage(page,null);

    }
  • 写个配置类,分页拦截器
package com.itheima.config;


import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration  //配置类
public class MPconfig {
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor());  //分页拦截器
        return interceptor;

    }
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-arBwLGFt-1641018122109)(https://cdn.jsdelivr.net/gh/1wenjinjie/picture/img/202112281954332.png)]

image-20211228195429348


数据层标准开发(条件查询)

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

  2. 所有查询操作封装成方法调用

  3. 查询条件支持动态条件拼装

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

    }


    @Test   //使用Lambda表达式减少写错
    void testGetBy2(){

        String name = "spring";
        LambdaQueryWrapper<Book> lqw=new LambdaQueryWrapper<Book>();

        lqw.like(name!=null,Book::getName,name);
        bookDao.selectList(lqw);

    }

业务层标准开发(基础CRUD)

业务层开发

  • Service层接口与数据层接口定义具有较大区别,不要混淆
  • selectByUserNameAndPassword(String username,String password);
  • login(String username,String password);
  1. 定义接口

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LwmSt9BH-1641018122110)(https://cdn.jsdelivr.net/gh/1wenjinjie/picture/img/202112282058047.png)]

package com.itheima.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.itheima.domain.Book;

import java.util.List;

public interface BookService {
    Boolean save(Book book);
    Boolean update(Book book);
    Boolean delete(Integer id);
    Book getById(Integer id);
    List<Book> getAll();
    IPage<Book> getPage(int currentPage,int pageSize);
}

  • 实现类定义
package com.itheima.service.impl;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.itheima.dao.BookDao;
import com.itheima.domain.Book;
import com.itheima.service.BookService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
@Service   //业务层对应的bean
public class BookServiceImpl  implements BookService {

    //转调数据层,进行注入
    @Autowired
    private BookDao bookDao;

    @Override
    public Boolean save(Book book) {
		//将业务状态设置为操作是否完成
        return bookDao.insert(book)>0;
    }

    @Override
    public Boolean update(Book book) {
        return bookDao.updateById(book)>0;
    }

    @Override
    public Boolean delete(Integer id) {
        return bookDao.deleteById(id)>0;
    }

    @Override
    public Book getById(Integer id) {
        return bookDao.selectById(id);
    }

    @Override
    public List<Book> getAll() {
        return bookDao.selectList(null);
    }

    @Override
    public IPage<Book> getPage(int currentPage, int pageSize) {
        IPage page = new Page(currentPage,pageSize);
         bookDao.selectPage(page,null);
         return page;
    }
}

  • 测试类

image-20211228210019855

package com.itheima.service;


import com.baomidou.mybatisplus.core.metadata.IPage;
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("测试数据122223");
        book.setName("测试数据123");
        book.setDescrption("测试数据123");
        bookService.save(book);
    }
    @Test
    void testUpdate(){
        Book book = new Book();
        book.setId(9);
        book.setType("测试123aaa");
        book.setName("测试数据123");
        book.setDescrption("测试数据123");
        bookService.update(book);
    }
    @Test
    void testDelete(){
        bookService.delete(10);
    }
    @Test
    void testGetAll(){

        bookService.getAll();
    }
    @Test
    void testGetPage(){
        IPage<Book> page = bookService.getPage(2, 5);

    }

}

小结:

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

业务层快速开发

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NB7HwHNl-1641018122110)(https://cdn.jsdelivr.net/gh/1wenjinjie/picture/img/202112282106506.png)]

  • 使用MyBatisPlus提供有业务层通用接口(ISerivce)与业务层通用实现类(ServiceImpl<M,T>)
  • 在通用类基础上做功能重载或功能追加
  • 注意重载时不用覆盖原始操作,避免元素提供的功能丢失
  1. 业务层通用接口

image-20211228213036594

  1. 业务层通用实现类

image-20211228212936266

  1. 测试类
package com.itheima.service;


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 BookServiceTest {
    @Autowired
    private IBookService bookService;

    @Test
    void testGetById(){  //业务层需要打印出来
        System.out.println(bookService.getById(4));
    }

    @Test
    void testSave(){
        Book book = new Book();
        book.setType("测试数据122223");
        book.setName("测试数据123");
        book.setDescrption("测试数据123");
        bookService.save(book);
    }
    @Test
    void testUpdate(){
        Book book = new Book();
        book.setId(9);
        book.setType("测试123aaa");
        book.setName("测试数据123");
        book.setDescrption("测试数据123");
        bookService.updateById(book);
    }
    @Test
    void testDelete(){
        bookService.removeById(12);
    }
    @Test
    void testGetAll(){

        bookService.list();
    }
    @Test
    void testGetPage(){

        IPage<Book> page = new Page<>(2,5);
        bookService.page(page);
    }

}

小结:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-M32YhdCt-1641018122111)(https://cdn.jsdelivr.net/gh/1wenjinjie/picture/img/202112282134272.png)]


表现层基础开发

表现层开发

  • 基于Restful进行表现层接口开发
  • 使用Postman测试表现层接口功能
  1. 功能测试

image-20211228234921619

image-20211228234856589

  • 表现层接口开发
 @Autowired
    private IBookService bookService;

    @GetMapping
    public List<Book> getAll(){
        return bookService.list();
    }
    @PostMapping
    public Boolean save(@RequestBody Book book){
        return bookService.save(book);
    }
    @PutMapping
    public Boolean update(@RequestBody Book book){
        return bookService.modifyBook(book);
    }
    @DeleteMapping("{id}")
    public Boolean delete(@PathVariable Integer id){
        return bookService.delete(id);
    }
    @GetMapping("{id}")
    public Book getById(@PathVariable Integer id){
        return bookService.getById(id);
    }
    @GetMapping("{currentPage}/{pageSize}")
    public IPage<Book> getPage(@PathVariable int currentPage,@PathVariable int pageSize){
        return bookService.getPage(currentPage, pageSize);
    }

小结:

  1. 基于Restful制作表现层接口
  • 新增:POST
  • 删除:DELETE
  • 修改:PUT
  • 查询:GET
  1. 接收参数
  • 实体数据:@RequestBody
  • 路径变量:@PathVariable

表现层数据一致性处理 (R对象)

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

image-20211229085920651

  • 表现层接口统一返回值类型结果
    @Autowired
    private IBookService bookService;

    @GetMapping
    public R getAll(){

        return new R(true,bookService.list());
    }
    @PostMapping
    public R save(@RequestBody Book book){
        return new R(bookService.save(book));
    }
    @PutMapping
    public R update(@RequestBody Book book){

        return new R(bookService.modifyBook(book));
    }
    @DeleteMapping("{id}")
    public R delete(@PathVariable Integer id){

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

        return new R(true,bookService.getById(id));
    }
    @GetMapping("{currentPage}/{pageSize}")
    public R getPage(@PathVariable int currentPage,@PathVariable int pageSize){

        return new R(true,bookService.getPage(currentPage, pageSize));

    }

小结:

image-20211229090052660


前后端调用(axios发送)

前后端协议联调

  • 前后端分离结果设计中页面归属前端服务器
  • 单体工程中页面放在resource目录下的static目录(建立clean)
  1. 前端发送异步请求,调用后端接口

image-20211229093513597

  1. 小结

image-20211229093601203


列表功能

image-20211229094019460

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

添加功能

  1. 弹出添加窗口

image-20211229104720595

  1. 清除数据

image-20211229104739027

  1. 添加

image-20211229104834111

小结:

image-20211229105423649


删除功能

  • 删除,row是当前行数据

image-20211229111223849

  • 删除,防止删除错误

image-20211229111314361

  • 小结

image-20211229111358563


修改功能 (加载数据)

  • 弹出窗口修改

image-20211229113028345

  • 删除信息维护

image-20211229113413794

小结:

image-20211229113437981


修改功能

image-20211229170014348

小结:

image-20211229170044532


异常消息处理

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

image-20211229173121224

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

image-20211229173249457

小结:

image-20211229173407149


分页功能

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

image-20211229194638036

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

image-20211229194755103

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

image-20211229194858983

  • 分页查询

image-20211229194954678

  • 加载分页数据

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QoRFWRhc-1641018122120)(https://cdn.jsdelivr.net/gh/1wenjinjie/picture/img/202112291950983.png)]

  • 分页页码切换

image-20211229195101807

小结:

image-20211229195138415


分页功能维护

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

image-20211229200140284


条件查询

  • 查询条件数据封装
  1. 单独封装
  2. 与分页操作混合封装

image-20211229213116776

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

image-20211229213308428

  • 后台接收参数,controller接收参数

image-20211229213349133

小结:

image-20211229213457057

标签:Springboot,img,Book,书管,book,防盗链,import,public,详解
来源: https://blog.csdn.net/wenjinjie1/article/details/122267386

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有