JavaWeb学习笔记-part11-SpringBoot-基础篇

目录

1 概述

1.1 快速开发一个SpringBoot项目感受其魅力

1.2 如果不能使用idea创建boot项目

1.3 如果你无法访问start.spring.io来创建项目

1.4 非联网状态创建项目(手工制作)

1.5 了解SpringBoot是如何简化开发

2 SpringBoot的基础配置

2.1 属性配置

2.2 配置文件的三种格式

2.3 yml(yaml)文件格式

2.3.1 语法规则

2.3.2 数据读取

3 整合第三方技术

3.1 整合JUnit

3.2 整合MyBatis

3.3 整合MyBatis-Plus

3.4 整合Druid

4 其实到这里,你已经学会了SpringBoot的基础操作了,快去做项目吧(笑)


1 概述

SpringBoot的设计目的是用来简化Spring应用的初始搭建以及开发过程

1.1 快速开发一个SpringBoot项目感受其魅力

  1. idea新建项目使用Spring Initializr模板

    JavaWeb学习笔记-part11-SpringBoot-基础篇

    JavaWeb学习笔记-part11-SpringBoot-基础篇

    JavaWeb学习笔记-part11-SpringBoot-基础篇

  2. 编写一个SpringMVC的Controller类:

    package com.pjh.controller;
    ​
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    ​
    @RestController
    @RequestMapping("/books")
    public class MyController {
    ​
        @GetMapping
        public String getById() {
            System.out.println("SpringBoot is running...");
            return "SpringBoot is running...";
        }
    ​
    }

  3. 运行自动生成的Application类:

    JavaWeb学习笔记-part11-SpringBoot-基础篇

  4. 得到运行结果:

    JavaWeb学习笔记-part11-SpringBoot-基础篇

  5. 现在你可以在浏览器打开你的网站了

与以往使用Spring的程序相比:

类/配置文件 Spring SpringBoot
pom文件中的坐标 手工添加 勾选添加
web.xml配置类 手工制作
Spring/SpringMVC配置类 手工制作
控制器 手工制作 手工制作

一些tips:

用idea开发SpringBoot时需要联网且能够加载到程序框架结构

创建项目有很多文件,看着很闹心怎么办?在idea的setting中,在File Types设置里的ignored Files and Folders里面,设置你想隐藏的文件,这样就可以让你的项目变得清爽无比,且不会删除那些文件(支持*通配符)。

1.2 如果不能使用idea创建boot项目

如果不能使用idea创建boot项目,可以在spring的官网的spring initializr创建项目,并导入到你的编译器中。

具体教程很多,这里不再赘述。

但是这种方法仍然依赖于外网,如果有一天不能够访问这个网站,岂不是G了,所以还有其他方法。

1.3 如果你无法访问start.spring.io来创建项目

在这个界面选择Custom,并且填入网址:http://start.aliyun.com

JavaWeb学习笔记-part11-SpringBoot-基础篇

见文知义,这是由国内阿里巴巴公司建立的一个用来创建SpringBoot项目的网站。

之后的操作和1.1中类似。

但是你真的处于非联网情况下,需要创建一个项目该怎么办?

1.4 非联网状态创建项目(手工制作)

  1. 创建一个maven工程,且不使用任何模板(骨架)

  2. 配置pom文件

    <?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>
        
        <!--
            继承SpringBoot
        -->
        
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.5.6</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
        
        
        <groupId>com.pjh</groupId>
        <artifactId>01_quick_start</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        
        <name>01_quick_start</name>
        <description>Demo project for Spring Boot</description>
        
        <properties>
            <java.version>1.8</java.version>
        </properties>
        
        <dependencies>
            <!-- 继承下面这个依赖,当然在非联网状态,你的maven仓库中存在该依赖才能导入这个依赖 -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</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>

  3. 创建Application类:

    package com.pjh;
    ​
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    ​
    //非常重要
    @SpringBootApplication
    public class SpringBootApp {
    ​
        public static void main(String[] args) {
            //非常重要
            SpringApplication.run(SpringBootApp.class, args);
        }
    ​
    }

    叫啥名都行,主要是要加上@SpringBootApplication标签,以及一个main方法。

  4. 创建Controller类:

现在,一个SpringBoot项目以及创建完全。

关键就在于Application类和Maven的pom文件的创建和编写。

1.5 了解SpringBoot是如何简化开发

这四个部分让开发简化:

  • parent

    我们可以看到pom继承了一个叫做spring-boot-starter-parent-2.x.x的文件,而spring-boot-starter-parent又继承了一个叫做spring-boot-dependencies-2.x.x。

    首先可以在这个文件中看见它定义了一系列属性,分别对应大部分依赖的版本号,这些版本号是由SpringBoot选出的兼容性最好的版本号,达到了减少依赖冲突的目的。然后可以看见一个dependencyManagement,它为每一个依赖配置了其版本号,因此我们在pom文件添加依赖时,不需要写版本号,为我们节省了很多时间。

    这些版本号的管理只与SpringBoot的版本有关系,即文件名最后的2.x.x,不同的版本里面收录的版本号也不尽相同。

    parent只是为你管理了版本号,但是导入依赖依然需要你写入依赖的坐标(gav中的ga)。

  • starter

    starter实际上springboot封装好的一堆依赖包,你导入一个starter就意味着你导入了一堆依赖和可能更多的starter。

    需要某项技术时,就导入对应的starter,比如:使用web技术就导入spring-boot-starter-web。达到了减少依赖配置的目的。

    需要注意的是,SpringBoot本身也是作为依赖导入到项目的,所以也存在一个spring-boot-starter的文件,这个文件的引用率非常高。

    这背后使用的是maven的依赖传递技术。

  • 引导类

    也就是Application类,它是整个SpringBoot项目的入口。

    重点在于@SpringBootApplicaiton标签,它包含了若干子标签,目的就是简化Spring的开发

    在Application运行后,会初始化Spring容器,并引导application类所在包和其子包中的所有bean。

  • 内嵌tomcat

    在spring-boot-starter-web中,我们可以看到一个叫做spring-boot-starter-tomcat的文件,其中就导入了我们的内嵌tomcat依赖,也就是说,在我们的SpringBoot项目中,tomcat服务器是作为一个对象被spring容器管理着,从而不需要我们额外再给我们的项目配置一个tomcat服务器。

    这个内嵌tomcat也是可以被我们剔除掉的,只要再pom文件中导入spring-boot-starter-web的地方加上<exclusion>来剔除spring-boot-starter-tomcat依赖即可。但是此时我们的项目就不能提供web服务,当然我们可以导入其他服务器来支持web服务。

    SpringBoot中内置了三款服务器,分别是:

    1. tomcat(默认):apache出品,应用面广,负载了若干较重(相对其他两款)的组件

    2. jetty:更加轻量级,负载性能远不如tomcat,谷歌在用

    3. undertow:负载性能勉强跑赢tomcat,大可不必替换掉tomcat

总结:需要什么导入什么,SpringBoot都帮你做好了。

2 SpringBoot的基础配置

由于SpringBoot舍弃了若干杂乱配置文件,转而使用一个统一的application配置文件来完成所有的配置。因此以下设置都是在application中完成。

tips:

以下以属性文件代称application.properties。

属性文件地址:src/main/resources/application.properties。

2.1 属性配置

修改配置:

  1. 修改服务器端口:

    作为开发人员,经常需要在浏览器输入自己的服务器地址来测试功能,8080(或者其他端口号)已经写的麻木了,所以我们可以通过修改端口号,来实现在访问时省略书写端口的步骤,真是太方便了(迫真)。

    在属性文件中,加入一句

    #服务器端口配置
    server.port=80
    #或者其他端口

    好的,现在你已经可以通过访问http://localhost/来访问你的web服务了。

  2. 修改banner:

    啥是banner呢,banner就是你运行application类时,Run窗口出现的Spring图案

      .   ____          _            __ _ _
     /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
    ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
     \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
      '  |____| .__|_| |_|_| |_\__, | / / / /
     =========|_|==============|___/=/_/_/_/
     :: Spring Boot ::                (v2.5.6)

    没错,这也是可以修改的,只需要在属性文件中,加入几句

    #banner设置
    ​
    #banner显示设置:off不显示;console控制台显示;log日志显示。默认console
    spring.main.banner-mode=console
    #banner图片设置:内部有一套识别机制,可以将图片用色彩字符拼出来
    spring.banner.image.location=YouAreThis.png
    #还有更多设置不一一列举

    我这里选用了这样一张图片

    JavaWeb学习笔记-part11-SpringBoot-基础篇

    然后我们就可以在控制台上看到(色彩无法展示,实际上是有颜色的)

                                                                    .             
                                                                *::o&o*           
                           ..*:&8#@@@@@@@@@@@@@@#8o*.        *o#@@@##@@8          
                       :8####8&::***... ......**::&8#@@#&*.&&@#o*..  .o###o.      
                    *&&#@8&oo:.       .           .**&&#@8o###:.      *#@@&.      
                 *&#8::.             .:&&&:.            *&#@@#8*      .&@@&.      
               **&@#:               :88###8&*            .:88#@&*     .8@@&.      
             :o@@8:              .##o.    *&8:..             *8@@88* :8@@@&.      
            *8@oo.o#888o.       *8&&   :&&#@@#**               *&###:.*o##@#&*    
           .&#8..:88o&&#o      .o#::   &##@@@@oo.               *&&@#:..::8@#o    
           &@&.&&8*    :@:     .88    o@@@@@@@88*                ..:#@8:   :@@oo  
        ..:@#*:88*  .&&@@8.    .8&   .#@@@@@@@@@*      .*.          *8@#::*:##::  
        ..o@&.o88. .&@@@@#*     #8   *#@@@@@@@@@*    ..*o:          .:#@###@@#**  
        **@#. 8oo .:@@@@@#*    .8@:::&#@@@@@@#oo.      &&.            :8@@#&*     
       .&&@o  o&&. .#@@@@8*     *o88#8oo::**.       .88#*              .&&#8*     
        &&@*  *&&::o@@@@8o.                        *o##o                ::8#&.    
       .88@*     .......                         *&8&**                   *&@8** .
       .88@.                                    .&#&.                     .:#@oo**
       .&&@*                                *&@@#o.                         :#@@#@
        ::@&.                        ..*oo8#8:                               :##@@
        ..#@&*.                ..***o8@@##o*.                                *88@@
          :o8#@@@@@88888#@@@@@@###&&o:..                      *&8&&*          ::#@
               oo&#@#88o:.                              .*.**&&.:88*            :#
                 .:&8@@@@&:**                       .**o&88888* o##.            *8
                       ..o&88#####&&:*:*           o@88*  *::. o#::              .
                                .*oo88#@@@8*      o8:   .      &8..               
                                    ..&#&&:      *&&.     .... :&::               
                                     .&@**      .:&:            *oo&*             
                                     .8#..       :&&*            ::&o.            
                                     :#&          *:&88o:*          *8&.          
                                    .&@o                *:*..        *&#..      

    比较可惜的是,图片的尺寸(像素点)不能太大,否则就不能识别了。

  3. 修改日志设置

    日志就是我们启动Application时,控制台发的那些info(不包含我们的小恐龙)

    2021-11-04 18:53:21.808  INFO 19880 --- [           main] com.pjh.Application                      : Starting Application using Java 1.8.0_221 on LAPTOP-AD3PSMVA with PID 19880 (D:\code-java\SpringBoot\02_basic_setting_config\target\classes started by yueyinghaibao in D:\code-java\SpringBoot)
    2021-11-04 18:53:21.810  INFO 19880 --- [           main] com.pjh.Application                      : No active profile set, falling back to default profiles: default
    2021-11-04 18:53:22.397  INFO 19880 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 80 (http)
    2021-11-04 18:53:22.402  INFO 19880 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
    2021-11-04 18:53:22.403  INFO 19880 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.54]
    2021-11-04 18:53:22.449  INFO 19880 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
    2021-11-04 18:53:22.449  INFO 19880 --- [           main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 608 ms
    2021-11-04 18:53:22.689  INFO 19880 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 80 (http) with context path ''
    2021-11-04 18:53:22.696  INFO 19880 --- [           main] com.pjh.Application                      : Started Application in 1.289 seconds (JVM running for 1.978)

    我们可以在属性文件中加入一句

    #日志设置
    #日志等级设置:即显示的内容范围。debug显示所有;info显示部分提示信息;error仅显示错误信息;warn显示警告信息
    #logging.level.*:*表示你要设置的日志显示范围的内容,比如将sql的日志显示功能设置为warn,就可以写成:logging.level.sql=warn
    logging.level.root=info

除了以上介绍的三个设置,springboot还有很多很多的设置,我们可以通过spring的官方文档进行查看和学习,在我们以后的学习过程中会逐步介绍一些会使用的设置配置。

需要注意的是,尽管属性文件中有很多配置项,但是这些配置项是基于你导入了依赖(starter)才存在对应的配置项。

tips:

由第二个配置可以看出,springboot的设置是多么的庞大且有趣。

2.2 配置文件的三种格式

SpringBoot提供了三种application文件格式,分别是:

  1. application.properties(传统格式/默认格式):采用键值对的形式对配置进行修改。

    server.port=80

  2. application.yml(主流格式/推荐使用):

    server:
        port:81

  3. application.yaml

    server:
        port:82

如果这三种配置文件格式共存,那么它们的优先级是:properties > yml > yaml

这种优先级仅适用于复数个格式文件中都配置了同一个属性,如果没有配置相同的属性则都会生效。

例如:

如果properties和yml中都配置了server.port分别是80和81,那么最后生效的是80;

如果properties和yml中分别配置了,server.port=80 和 logging: level: root: info那么这两个配置都会生效。

tips:

在idea环境下,yaml文件格式没有代码自动补全功能,我们需要自己将yaml格式配置进代码补全功能的服务列表里,如图

JavaWeb学习笔记-part11-SpringBoot-基础篇

在步骤④中选中需要加入的文件即可,记得apply一下

2.3 yml(yaml)文件格式

YAML(YAML Ain‘t Markup Language),一种数据序列化格式,拓展名为.yml(主流)和.yaml

优点:

  • 易于阅读

  • 容易和脚本语言交互

  • 以数据为核心,重数据轻格式

2.3.1 语法规则

语法规则:

  • 大小写敏感

  • 属性层级关系使用多行描述,每行结尾使用冒号结束

  • 使用缩进表示层级关系,同层级左侧对齐,只允许使用空格(不允许使用Tab键)属性值前面添加空格(属性名与属性值之间使用冒号+空格作为分隔)

  • 同一层级不允许出现相同属性名

  • #表示注释

演示:

#服务器端口设置
server:
  port: 81
#banner设置
spring:
  banner:
    image:
      location: YouAreThis.png
#日志设置
logging:
  level:
    root: info
​
#如果要表示一个属性数组
likes: 
  - music
  - sleep
#或者(此处为举例,实际上同一层级不能重复属性)
likes: [music,sleep]
​
#如果要表示一个对象数组
users:
  - name: 1
    age: 1
  - name: 2
    age: 2
#或者
users:
  - 
    name: 1
    age: 1
  - 
    name: 2
    age: 2

tips:

idea会对你的书写进行规范,所以不需要记这么复杂的格式(笑)

”属性名与属性值之间使用冒号+空格作为分隔“这句一定要记住

2.3.2 数据读取

  1. 使用@Value读取单个数据,属性名引用方式:${一级属性名.二级属性名......}。 读取数组元素,则是${属性名[下标]}。

    @Value("${server.port}")
    ​
    private String port;

  2. 使用spEL表达式可以实现共有字段的复用,直接在需要数据复用的地方读取数据即可。例如

    baseDir: D:\tools
    ​
    typoraDir: ${baseDir}\typoraDir

  3. 使用@Autowired自动装配注解,一次性读取所有的数据并封装为一个对象Environment中,在使用时调用Environment对象的getProperty(key)方法。

    @Autowired
    private Environment env;
    ​
    System.out.println(env.getProperty(""));

  4. 引用对象的封装,使用@Component,@ConfigurationProperties和@Autowired注解

    //引用对象类
    //被注入的对象必须受到SpringBoot的管辖,因此加上@Component注解
    @Component
    //读取配置文件里面value(prefix)填入属性名
    @ConfigurationProperties("zhangsan")
    public class User {
        private String name;
        private Integer age;
    ​
        //getter&setter...
    }
    //获取这个类
    @Autowired
    private User user;

tips:

yaml格式中的字符串中的转义字符(\t,\n)不会被加载,如果需要他加载,则在字符串外面加上双引号" ",注意单引号' '是不行的。

3 整合第三方技术

整合第三方技术的核心步骤只有两条:

  1. 导入对应的starter

  2. 配置相关的信息

至于其他的步骤都不过是对第三方技术的使用

3.1 整合JUnit

SpringBoot本质是一个maven项目,因此它默认整合了JUnit依赖。

在pom文件中,我们可以看到有一个依赖项名为spring-boot-starter-test,这其中就包含了JUnit的整合。

关于JUnit的使用:

  1. 你需要准备一个bean

  2. 在测试类中注入一个要测试的对象

  3. 在测试方法中调用测试对象的对应方法

测试类在测试包中的位置必须在对应main包的Application类的包或者子包中,否则将无法找到对应的测试对象。

如果不在对应包或者子包中,我们需要额外配置Application的类:在@SpringBootTest注解中添加classes属性,它的值应该是Application的类,即@SpringBootTest(classes = Application.class) 。

测试类内部的机制是通过寻找一个叫做@SpringBootConfiguration的注解(它是用来表明配置类的位置),这个注解被包含在@SpringBootApplication注解中,因此当测试类提示找不到配置类时,我们可以手动设置配置类的地址。

tips:

当你在创建项目时没有选择任何依赖时,springboot会默认导入spring-boot-starter和spring-boot-starter-test依赖

3.2 整合MyBatis

  1. 创建一个新的springboot项目

  2. 在选择依赖时选择SQL中的MyBatis Framework和对应的数据库驱动,比如MySQL Driver

  3. 在配置文件中配置相关的信息datasource

    spring:
      datasource: 
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://localhost:3306/test2?serverTimezone=UTC
        username: 
        password: 

  4. 定义数据层接口与映射配置

  5. 进行测试

tips:

关于mysql驱动版本5和8之间的一些小问题:

  • mysql驱动8要求设置时区serverTimzone,一般在写url时写成:jdbc:mysql://localhost:3306/test2?serverTimezone=UTC;

  • 还有就是驱动8的地址从以前的com.mysql.jdbc.Driver改为了com.mysql.cj.jdbc.Driver。

3.3 整合MyBatis-Plus

MyBatis Plus是由国人开发的Mybatis的简化开发板,它里面自带了一些CRUD的代码,可以减少我们编写mapper的工作量,但是SpringBoot官方并没有收录该依赖,所以需要我们自行在pom文件中添加。

  1. 创建一个新的springboot项目

  2. 在选择依赖时选择SQL中选择对应的数据库驱动,比如MySQL Driver

  3. 在pom文件中加入Mybatis Plus的依赖

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

  4. 在配置文件中配置相关的信息datasource

  5. 将数据层接口继承BaseMapper<T>接口

    @Mapper
    @Repository
    public interface QuestionDao extends BaseMapper<Question> {
    }

  6. 进行测试,可以直接调用BaseMapper中提供的一些操作

tips:

  1. 如果遇到报错表不存在,可能是因为你的实体类和表的名字不匹配导致的,可以在实体类上面加上@TableName("表名")来指定对应的表。

  2. 在插入时,如果id是按照数据库中的自增字段进行插入可能会报错,因为mp会用自带的雪花算法为你设置id导致报错,这时可以通过在配置文件将id的设置改为自增

    mybatis-plus:
      global-config:
        db-config:
          id-type: auto

  3. 开启mp的日志

    mybatis-plus:
      configuration:
        log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

  4. mp的分页查询,需要自己手动设置拦截器MybatisPlusInterception

  5. mp的条件查询,需要使用QueryWrapper的封装对象,加入到select的参数中

3.4 整合Druid

Druid是由国内公司阿里巴巴开发的一个好用的数据源,同样的SpringBoot没有收录需要我们手动添加

  1. 创建一个新的springboot项目

  2. 在选择依赖时选择SQL中的MyBatis Framework和对应的数据库驱动,比如MySQL Driver

  3. 在pom文件中加入Druid的依赖

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

  4. 在配置文件中配置相关的信息datasource,这次要在druid的配置中设置

    spring:
      datasource:
        druid:
          driver-class-name: com.mysql.cj.jdbc.Driver
          url: jdbc:mysql://localhost:3306/test2?serverTimezone=UTC
          username: 
          password: 

  5. 定义数据层接口与映射配置

  6. 进行测试

4 其实到这里,你已经学会了SpringBoot的基础操作了,快去做项目吧(笑)

这里补充一点东西:

  1. lombok

    在编写实体类时如果属性比较多,往往会有大量的getter和setter,让代码十分的不美观。

    而lombok通过提供几个注解帮我们省略了getter&setter。

    而使用lombok需要导入它的依赖(很显然,springboot帮我们管理lombok的版本号)

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

    以及还要在idea安装一个插件:直接在setting的plugin中搜索Lombok并且安装重启即可。

    我将介绍它提供的一些注解,而这些注解放在实体类的上方即可生效

    @Getter
    //所有属性的get方法
    @Setter
    //所有属性的set方法
    @Data
    //包括getter、setter、toString、hashCode、equals等方法,这个注解是最常用也是最好用的
    @AllArgsConstructor
    //有参构造
    @NoArgsConstructor
    //空参构造

    lombok实际上是在编译期时,在代码中嵌入了对应的方法。

  2. Mybatis Plus

    没办法,它实在是太香了,这里介绍两个快速开发的功能。

    数据持久层(Dao)快速开发:

    见3.3。

    业务层(Service)快速开发:

    在以往的SSM中,我们开发业务层需要写复数个service接口和它的实现类,它其中的很多方法都大相径庭。比如最基础的增删改查,重复的代码写一万遍简直折磨,因此伟大的Mybatis Plus为我们提供了IService接口和ServiceImpl实现类。

    只需要让你的接口继承IService<T>(T表示Service操作的实体类),再让其实现类继承ServiceImpl<M,T>(M表示Dao,T表示实体类)和实现你的接口。

    这样你就拥有了很多简单且实用的业务方法。比如:save,update,remove,list,page等等。

    如果提供的功能不能满足你的需要,还可以自己追加功能或者重载功能。重载功能时最好不要覆盖原始操作,万一以后要用呢。

  3. REST/RESTful

    REST,以及RESTful的讲解_九师兄-CSDN博客_rest

上一篇:SpringBoot原理深入及源码分析


下一篇:springboot自定义starter