SpringBoot+MybatisPlus学习总结

一、SpringBoot简介

1.1 Spring Boot是什么

SpringBoot是一个基于Spring框架的可以快速开发Web应用的轻量型框架

Spring:春天

Boot:启动

  • 可以创建独立的Spring应用程序

  • 嵌入了tomcat、jetty等应用服务器程序,可以不需要发布部署即可直接启动项目

  • 提供了很多准备好的启动器,简化项目配置

  • 自动配置Spring以及第三方依赖

  • 绝对无代码生成,也完全不需要任何xml配置

1.2 如何学习SpringBoot

SpringBoot官方文档

https://docs.spring.io/spring-boot/docs/2.7.14/reference/html/

二、SpringBoot快速入门

2.1项目创建

1)创建一个maven结构java项目
2)引入SpringBoot的依赖
<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.5.RELEASE</version>
</parent>
<!-- SpringBoot的web启动器:SpringMVC -->
<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
</dependencies>



SpringBoot里面提供了很多个starter(启动器),其本质就是一个项目包,在这个项目包中依赖了其他包,项目中只需要依赖这个starter包,maven就会自动去依赖这个starter包所有依赖的其他包了(变成简介依赖)

starter-web:就是对SpringMVC所需的所有jar包进行了封装,导入starter-web包,就相当于导入了SpringMVC所需的所有jar包。

3)编写启动类,写一个main方法+注解
 @SpringBootApplication
2 public class Application {
3     public static void main(String[] args) {
4         SpringApplication.run(Application.class, args);
5     }
6 }
@SpringBootApplication注解

是Spring Boot的核心注解,它其实是一个组合注解

 @Target(ElementType.TYPE)
 2 @Retention(RetentionPolicy.RUNTIME)
 3 @Documented
 4 @Inherited
 5 @SpringBootConfiguration
 6 @EnableAutoConfiguration
 7 @ComponentScan(excludeFilters = {
 8         @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
 9         @Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
10 public @interface SpringBootApplication {
11 ...
12 }
  • @SpringBootConfiguration:

@Configuration:表示当前启动类可以作为一个配置类,里面可以写@Bean来配置bean(等同于xml中的一个bean标签)

  • @EnableAutoConfiguration:

@AutoConfigurationPackage:@Import(AutoConfigurationPackages.Registrar.class):自动递归扫描启动类所在的包

@Import(AutoConfigurationImportSelector.class):手动配置除自动扫描的bean以外的其他bean

  • @ComponentScan:

扫描启动类所在包以外的其他包

4)在子模块中编写一个Controller类
package com.cqgcxy.controller;

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

@RestController
@RequestMapping("/test")
public class TestController {

    @RequestMapping("/hello")
    public String hello(){
        System.out.println("噜啦噜啦嘞");
        return "Hello SpringBoot";
    }
}

2.2 打包启动

1)添加打包插件

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

2)执行打包命令

切换到当前项目pom.xml所在的目录,执行命令  mvn clean package

3)切换到target目录下执行命令启动项目  java -jar jar包文件的相对路径

2.3热部署

项目在开发过程中,可以不需要每次都重启,等待一段时间后会自动更新编译运行

使用
添加依赖,可以在创建的项目的时候选择,也可以中途添加

<!--热部署-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <version>2.7.8</version>
</dependency>

开启热部署

2.4Lombok

用于简化实体类中模板代码的工具

<!--Lombok-->
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.24</version>
    <scope>provided</scope>
</dependency>

2.5 SpringBoot测试(整合Junit和Mybatis)

1)添加测试启动器依赖

<!-- SpringBoot的测试启动器 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>

2)编写单元测试类

@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringBootTest {

    @Autowired
    private TestController controller;

    @Test
    public void hello() {
        String hello = controller.hello();
        System.out.println(hello);
    }

}

在JUnit 4中,@RunWith注解用于指定测试运行器,而SpringRunner.class是Spring框架提供的测试运行器,用于在测试时创建Spring应用程序上下文。如果你的测试类中需要使用Spring的依赖注入、自动装配等特性,就需要添加@RunWith(SpringRunner.class)来指定使用Spring提供的测试运行器。

有些情况下,不需要显式添加@RunWith(SpringRunner.class)也能执行测试,这可能是因为项目中已经配置了默认的测试运行器,或者是因为测试类本身没有涉及到Spring的相关功能,不需要SpringRunner来创建Spring上下文。

在JUnit 5中,测试运行器的概念已经被弃用,取而代之的是扩展(Extension)机制,Spring框架也提供了对JUnit 5的扩展支持,可以通过@ExtendWith(SpringExtension.class)来实现相同的功能。

2.5.1集成Mybatis

1)添加starter-mybatis启动器的依赖

<!-- SpringBoot的测试启动器 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>

        <!-- mysql 数据库驱动 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

        <!--
            SpringBoot的mybatis启动器
                这个启动器是Mybatis官方开发的,不在SpringBoot的dependenciesManagement管理范围之内
                所以这里必须写版本号
        -->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.1.1</version>
        </dependency>

2)配置数据库连接信息

3)配置mybatis的别名和映射文件

# 数据库连接池配置
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql:///gcxy_teach
    username: root
    password: 123456

# mybatis的别名和映射文件路径
mybatis:
  type-aliases-package: com.cqgcxy.entity
  mapper-locations: classpath:com/cqgcxy/mapper/*Mapper.xml
  config-location: classpath:mybatis-config.xml

#  日志信息
#  OFF:这是最高的日志级别,用于关闭所有日志记录。
#  FATAL:这个级别指出每个严重的错误事件将会导致应用程序的退出。
#  ERROR:这个级别指出虽然发生错误事件,但仍然不影响系统的继续运行。
#  WARN:这个级别表明会出现潜在错误的情形。
#  INFO:这个级别表明消息在粗粒度级别上突出强调应用程序的运行过程。
#  DEBUG:这个级别指出细粒度信息事件对调试应用程序是非常有帮助的,就是输出debug的信息。
#  TRACE:这个级别指示比DEBUG更细粒度的信息事件。
logging:
  level:
    com.cqgcxy: trace

4)编写mapper接口和xml

5)启动类+@MapperScan注解

/**
 * @MapperScan("com.cqgcxy.mapper")
 *  代替了xml配置里面的MapperScannerConfigurer的bean标签配置,里面写了一个mapper层接口的包名称
 *  底层使用了动态代理技术自动生成实现类,通过Spring创建对象,并且注册到Spring容器中
 */
@MapperScan("com.cqgcxy.mapper")
@SpringBootApplication
public class App {

    public static void main(String[] args) {
        SpringApplication.run(App.class, args);
    }

}

6)单元测试

三、MybatisPlus学习

MybatisPlus中文官网:简介 | MyBatis-Plus

3.1Mybatis-plus代码生成器

<properties>
        <mybatis-plus-generator.version>3.4.1</mybatis-plus-generator.version>
        <velocity-engine-core.version>2.3</velocity-engine-core.version>
    </properties>

        <!--        逆向工程代码生成器-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>${mybatis-plus-generator.version}</version>
        </dependency>
        <!--        生成器默认模板引擎-->
        <dependency>
            <groupId>org.apache.velocity</groupId>
            <artifactId>velocity-engine-core</artifactId>
            <version>${velocity-engine-core.version}</version>
        </dependency>    

3.2在启动引导类同包下创建代码生成器类CodeGenerator

package cn.edu.cqie;

import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
import com.baomidou.mybatisplus.core.toolkit.StringPool;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.InjectionConfig;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.po.TableInfo;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.VelocityTemplateEngine;
import org.apache.commons.lang3.StringUtils;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class CodeGenerator {
    /**
     * <p>
     * 读取控制台内容
     * </p>
     */
    public static String scanner(String tip) {
        Scanner scanner = new Scanner(System.in);
        StringBuilder help = new StringBuilder();
        help.append("请输入" + tip + ":");
        System.out.println(help.toString());
        if (scanner.hasNext()) {
            String ipt = scanner.next();
            if (StringUtils.isNotEmpty(ipt)) {
                return ipt;
            }
        }
        throw new MybatisPlusException("请输入正确的" + tip + "!");
    }

    public static void main(String[] args) {
        // 代码生成器
        AutoGenerator mpg = new AutoGenerator();
        // 全局配置
        GlobalConfig gc = new GlobalConfig();
        String projectPath = System.getProperty("user.dir");
        gc.setOutputDir(projectPath + "/src/main/java");
        gc.setAuthor("Pep7Chiao");
        gc.setOpen(false);
        // 设置名字
        gc.setControllerName("%sController");
        gc.setServiceName("%sService");
        gc.setServiceImplName("%sServiceImpl");
        gc.setMapperName("%sMapper");
        // 设置 resultMap
        gc.setBaseResultMap(true);
        gc.setBaseColumnList(true);
        mpg.setGlobalConfig(gc);
        // 数据源配置
        DataSourceConfig dsc = new DataSourceConfig();
        dsc.setUrl("jdbc:mysql://localhost:3306/gcxy_teach?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true");
        dsc.setDriverName("com.mysql.cj.jdbc.Driver");
        dsc.setUsername("root");
        dsc.setPassword("123456");
        mpg.setDataSource(dsc);
        // 自定义配置
        InjectionConfig cfg = new InjectionConfig() {
            @Override
            public void initMap() {
                // to do nothing
            }
        };
        // 包配置
        PackageConfig pc = new PackageConfig();
        //  pc.setModuleName(scanner("模块名"));
        pc.setParent("com.cqgcxy");
        mpg.setPackageInfo(pc);
        // 如果模板引擎是 velocity
        String templatePath = "/templates/mapper.xml.vm";
        // 自定义输出配置
        List<FileOutConfig> focList = new ArrayList<>();
        // 自定义配置会被优先输出
        focList.add(new FileOutConfig(templatePath) {
            @Override
            public String outputFile(TableInfo tableInfo) {
                // 自定义输出文件名 , 如果你 Entity 设置了前后缀、此处注意 xml 的名称会跟着发生变化!!
                return projectPath + "/src/main/resources/mapper/" + pc.getModuleName()
                        + "/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;
            }
        });
        cfg.setFileOutConfigList(focList);
        mpg.setCfg(cfg);
        // 配置模板
        TemplateConfig templateConfig = new TemplateConfig();
        templateConfig.setXml(null);
        mpg.setTemplate(templateConfig);
        // 策略配置
        StrategyConfig strategy = new StrategyConfig();
        strategy.setNaming(NamingStrategy.underline_to_camel);
        strategy.setColumnNaming(NamingStrategy.underline_to_camel);
        strategy.setEntityLombokModel(true);
        strategy.setRestControllerStyle(true);
        // 写于父类中的公共字段
        strategy.setInclude(scanner("表名,多个英文逗号分割").split(","));
        strategy.setControllerMappingHyphenStyle(true);
        strategy.setTablePrefix(pc.getModuleName() + "_");
        mpg.setStrategy(strategy);
        mpg.setTemplateEngine(new VelocityTemplateEngine());
        mpg.execute();
    }
}

3.3插件推荐MybatisPlus

  • 20
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值