likes
comments
collection
share

SpringBoot项目整合常用场景和开发工具

作者站长头像
站长
· 阅读数 11

本篇文章主要整合一些 SpringBoot 项目常用的场景和开发工具,希望观众老爷们多多支持!

1. 起步:创建 SpringBoot 项目

1.1. 创建初始项目

  1. 选择新建项目->创建 Maven 项目,选择 JDK1.8 ->下一步

SpringBoot项目整合常用场景和开发工具

  1. 输入项目名称和组ID即可(工件名称通常是项目名称),点击完成即可

SpringBoot项目整合常用场景和开发工具

1.2. Maven 配置

在创建的项目中进行 Maven 配置。

  1. 添加父工程
    <parent>
        <artifactId>spring-boot-starter-parent</artifactId>
        <groupId>org.springframework.boot</groupId>
        <version>2.6.5</version> <!--指定SpringBoot的版本-->
    </parent>
  1. 添加依赖
<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

1.3. 创建启动类

在 java 文件夹下创建 com.yanghi.start 包,并在包下创建项目启动类SpringStartApplication,并在类上添加 @SpringBootApplication

package com.yanghi.start;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 * SpringBoot 启动类
 * @author 泗安
 */

@SpringBootApplication
public class SpringStartApplication {

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

1.4. 创建控制层 Controller,处理请求

com.yanghi.start 包下,创建 Controller 包,并在包下创建 HelloController 类,进行请求处理。并添加方法进行请求处理。

package com.yanghi.start.controller;

/**
 * 处理请求
 * @author 泗安
 */

@Controller 
public class HelloController {
    
    @RequestMapping("/hello")
    @ResponseBody
    public String hello(){
        return "Hello SpringBoot";
    }
}

注意

  1. @Controller 注解,用于将 Controller 层类交给 Spring IOC 容器进行管理。
  2. @RequestMapping 注解 ,表示请求映射,可指定请求地址和请求的方式
  3. @ResponseBody 注解,在 SpringBoot 中,Controller 层代码,返回字符串的话,默认是进行页面的跳转(模板);通过该注解,可将返回值变为响应体,进行数据的返回。该注解也可标注在类上,那么该类中的所有请求方法都返回数据。

1.5. 启动项目,进行测试

由于 SpringBoot 内嵌了 Tomcat web server,启动我们创建的 SpringBoot 启动类即可

SpringBoot项目整合常用场景和开发工具

通过图片的红框处,我们可以指定 Tomcat 服务器的默认地址为 localhost:8080

我们打开浏览器访问 localhost:8080/hello 试试看

SpringBoot项目整合常用场景和开发工具

1.6. 项目打包部署

SpringBoot 项目,如何进行打包,并进行部署

  1. 添加 Maven 打包插件
 <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
  1. 进行打包

SpringBoot项目整合常用场景和开发工具

  1. 打包完成后,就可以在左侧的 target 输出文件中看到打包好的 jar 包了

SpringBoot项目整合常用场景和开发工具

  1. 打开命令行工具 cmd ,输入 java -jar 项目 jar 包地址,即可运行项目

SpringBoot项目整合常用场景和开发工具

  1. 在服务器上,需要将 jar 包上传到服务器,打开终端,安装 Java 环境,使用命令进行部署即可。

1.7. 快速构建 SpringBoot 项目

通过 idea 中创建项目的 Spring Initializr 进行快速创建

  1. 选择 Spring Initializr 指定项目名称、组、工件、软件包名称、Java 版本、打包方式

SpringBoot项目整合常用场景和开发工具

  1. 点击下一步,指定你需要添加的依赖,如 Web,SQL

SpringBoot项目整合常用场景和开发工具

  1. 点击完成,即可创建初始化项目

2. 项目热部署

SpringBoot 为我们提供了一个方便我们开发测试的工具 dev-tools。使用后可以实现热部署的效果。当我们运行程序后对程序进行了修改,程序会自动重启部署。

原理是使用了两个 ClassLoader,一个 ClassLoader加载哪些不会改变的类(第三方jar包),另一个 ClassLoader加载会更改的类,称之为 Restart ClassLoader;这样在有代码更改的时候,原来的 Restart ClassLoader被丢弃,重新创建一个 Restart ClassLoader,由于需要加载的类相对较少,所以能够实现较快的重启时间。

2.1. 准备工作

  1. 设置 IDEA 自动编译,在 IDEA中的设置中进行配置,打开设置后,搜索输入 compiler(编译器),打开勾选 Bulid project automatically(自动构建项目),然后应用即可

SpringBoot项目整合常用场景和开发工具

  1. 设置允许程序运行时自动启动,在 IDEA中,快捷键 crtl + shift + alt + /,在出现的弹窗中,点击 Registry (注册表)

SpringBoot项目整合常用场景和开发工具

然后在出现的窗口中勾选 compiler.automake.allow.when.app.running重启IDEA即可

注意

当你没有找到compiler.automake.allow.when.app.running时。可打开设置,通过高级设置(Advanced Settings)中的编译器(complier)中的选项勾选,然后重启项目即可。

SpringBoot项目整合常用场景和开发工具

2.2. 使用

首先在 pom.xml中添加以下依赖,重新编译项目即可。

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-devtools</artifactId>
  <optional>true</optional>
</dependency>

然后触发热部署,当我们在修改完代码或者静态资源后,即可自动进行热部署,也可以使用 crtl + F9 强制热部署。

3. 单元测试

我们可以使用 SpringBoot整合 Junit进行单元测试。从 SpringBoot 2.2.0 版本开始引入 JUnit 5作为单元测试默认库。

下面进行 SpringBoot 整合 JUnit进行单元测试。

3.1. 使用

  1. 添加依赖
<dependency>
	<groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-test</artifactId>
</dependency>

SpringBoot项目整合常用场景和开发工具

  1. 创建测试

在需要进行测试的类上,按住 Alt + Enter,在弹出的窗口中,点击创建测试,勾选需要测试的成员方法,点击确定。

SpringBoot项目整合常用场景和开发工具

然后就可以在 test/java包下生成对应的测试类了。我们需要在类上标注 @SpringBootTest注解,即可使用被 Spring容器所管理的全部bean对象了,也就是说我们可以使用 @AutoWired或者 @Resource注入 Bean进行使用了。

@SpringBootTest
class HelloControllerTest {

    @Autowired
    private HelloController helloController;

    @Test
    void hello() {
        helloController.hello();
    }
}

当我们需要进行测试的类,又添加了几个方法,而我们已经生成了测试类,那么我们可以重新使用 Alt+Enter,勾选未测试的成员方法,就可以在测试类中添加新增需要测试的方法。

3.2. 兼容老版本

当我们对老项目中的 SpringBoot进行了版本升级后会发现之前的单元测试代码出现了一些问题(注解或找不到,无法注入 Bean)。

因为 JUnit5和之前的 JUnit4有比较大的不同。

SpringBoot项目整合常用场景和开发工具

从上面可以看出 JUnit5Junit PlatformJunit JupiterJunit Vintage组成。

  • Junit PlatformJUnit提供的平台功能模块,通过它,其他的测试引擎也可以接入。
  • Junit JupiterJUnit5的核心,是一个基于 JUnit Platform的引擎实现,它包含许多丰富的新特性来使得自动化测试更加方便和强大。
  • Junit Vintage是兼容 JUnit3JUnit4版本的测试引擎,使得旧版本的自动化测试也可以在 JUnit5下正常运行。

虽然 JUnit5包含了 JUnit Vintage来兼容JUnit3JUnit4,但是 SpringBoot 2.4以上版本对应的 spring-boot-starter-test移除了对 Vintage的依赖。所以相对于SpringBoot 2.4以上版本不兼容

JUnit3JUnit4

那么我们只需要在 pom.xml文件中引入 Vintage依赖,即可兼容使用JUnit3JUnit4的老项目了。

<dependency>
	<groupId>org.junit.vintage</groupId>
	<artifactId>junit-vintage-engine</artifactId>
	<scope>test</scope>
</dependency>

注意

  • JUnit4SpringBoot项目中,需要添加 @SpringBootTest()@RunWith(StringRunner.class) 注解,才能使用 Spring容器管理的 Bean

4. 整合 MyBatis

4.1. 数据准备

首先我们使用 MySQL创建一个数据库 tests

create database tests;
use tests

然后创建一个表 user,添加字段 idnameagesex

create table user (
	`id` int(11) not null auto_increment,
	`name` varchar(50),
  `age` int(11),
  `sex` char(1),
	 primary key (`id`)
)

然后插入几条数据

insert into user(`name`, `age`, `sex`) values ('lisi', 18, '男');
insert into user(`name`, `age`, `sex`) values ('wangwu', 20, '男');

SpringBoot项目整合常用场景和开发工具

4.2. 创建实体类

com.yanghi.start包下创建 bean包,存放我们的实体类;然后创建实体类 User,注意于 User表一一对应。

/**
 * User 实体类
 * @author yanghi
 */
public class User {
    
    private int id;
    
    private String name;
    
    private int age;
    
    private char sex;

    public User() {
    }

    public User(int id, String name, int age, char sex) {
        this.id = id;
        this.name = name;
        this.age = age;
        this.sex = sex;
    }

    public int getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public char getSex() {
        return sex;
    }

    public void setSex(char sex) {
        this.sex = sex;
    }


    @Override
    public boolean equals(Object o) {
        if (this == o) {
            return true;
        }
        if (o == null || getClass() != o.getClass()) {
            return false;
        }
        User user = (User) o;
        return id == user.id && age == user.age && sex == user.sex && Objects.equals(name, user.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(id, name, age, sex);
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + ''' +
                ", age=" + age +
                ", sex=" + sex +
                '}';
    }
}

4.3. 整合 MyBatis

  1. 引入依赖
<!--引入mybatis-->
<dependency>
	<groupId>org.mybatis.spring.boot</groupId>
	<artifactId>mybatis-spring-boot-starter</artifactId>
	<version>2.2.2</version>
</dependency>
<!--引入mysql驱动-->
<dependency>
	<groupId>mysql</groupId>
	<artifactId>mysql-connector-java</artifactId>
	<scope>runtime</scope>
</dependency>
  1. application.yml中配置数据库信息
spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/tests?useSSL=false&serverTimezone=GMT&characterEncoding=UTF-8&allowPublicKeyRetrieval=true # 数据库url地址
    username: root # 用户名
    password: 123456 # 密码
    driver-class-name: com.mysql.cj.jdbc.Driver # 驱动
  1. 配置 mybatis 相关配置
mybatis:
  mapper-locations: classpath:mapper/*Mapper.xml # mapper映射文件路径
  type-aliases-package: com.yanghi.start.bean # 配置具体包下类具有默认别名,不需要写实体类的完整路径

然后在 resources 文件夹下,创建 mapper 文件夹,用于书写映射文件。

SpringBoot项目整合常用场景和开发工具

  1. com.yanghi.start 包下创建 mapper 包,并创建 UserMapper接口
@Mapper
public interface UserMapper {

    /**
     * 获取User表的全部用户信息
     * @return 集合
     */
    List<User> getAllUsers();

}
  1. resource/mapper 文件夹下,创建对应的 UserMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.yanghi.start.mapper.UserMapper">
    <select id="getAllUsers" resultType="User">
        select id, name, age, sex from user
    </select>
</mapper
  1. UserMapper 接口上按住 Alt + Enter 生成测试即可
@SpringBootTest
class UserMapperTest {

    @Autowired
    private UserMapper userMapper;

    @Test
    void getAllUsers() {
        List<User> allUsers = userMapper.getAllUsers();
        System.out.println(allUsers);
    }
}

SpringBoot项目整合常用场景和开发工具

5. 整合Lombok工具

5.1. Lombok 的作用

Lombok是一个在 Java开发中用注解的方式,简化了 JavaBean 的编写(不需要手动添加无参/有参构造方法、getter/setter,equals,hasCode,toString),避免了冗余和样板式代码而出现的插件,让编写的类更加简洁,帮助我们更快的开发。

比如,我们在第三章整合 MyBatis时,User实体类的书写:我们必须添加固定的样板代码(getter/setter等)。

public class User {

    private int id;

    private String name;

    private int age;

    private char sex;

    public User() {
    }

    public User(int id, String name, int age, char sex) {
        this.id = id;
        this.name = name;
        this.age = age;
        this.sex = sex;
    }

    public int getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public char getSex() {
        return sex;
    }

    public void setSex(char sex) {
        this.sex = sex;
    }


    @Override
    public boolean equals(Object o) {
        if (this == o) {
            return true;
        }
        if (o == null || getClass() != o.getClass()) {
            return false;
        }
        User user = (User) o;
        return id == user.id && age == user.age && sex == user.sex && Objects.equals(name, user.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(id, name, age, sex);
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + ''' +
                ", age=" + age +
                ", sex=" + sex +
                '}';
    }
}

而我们使用 lombok的注解,就只需写成员属性即可。lombok插件帮我们进行自动注入样板代码。

@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {

    private int id;

    private String name;

    private int age;

    private char sex;

}

5.2. 安装 Lombok

  1. 首先在· IDEA插件商品中搜索 Lombok,进行安装。

SpringBoot项目整合常用场景和开发工具

  1. 在项目 pom.xml中添加 lombok依赖
<dependency>
	<groupId>org.projectlombok</groupId>
	<artifactId>lombok</artifactId>
	<version>1.18.24</version>
</dependency>

5.3. Lombok 常用注解

  • @Setter 注解在类或字段上,注解在类时为所有字段生成setter方法,注解在字段上时只为该字段生成 setter方法。
  • @Getter 使用方法同上,区别在于生成的是getter方法。
  • @ToString 注解在类上,添加toString方法。
  • @EqualsAndHashCode 注解在类上,生成hashCodeequals方法。
  • @NoArgsConstructor注解在类上,生成无参的构造方法。
  • @AllArgsConstructor 注解在类上,生成包含类中所有字段的构造方法。
  • @RequiredArgsConstructor 注解在类上,为类中需要特殊处理的字段生成构造方法,比如final和被@NonNull注解的字段。
  • @Data 注解在类上,生成setter/getter、equals、canEqual、hashCode、toString方法,如为final属性,则不会为该属性生成setter 方法。
  • @Slf4j 注解在类上,生成log变量,严格意义来说是常量。private static final Logger log = LoggerFactory.getLogger(UserController.class);

总结

本篇文章只介绍一些简单的使用,具体的详解,请期待以后的文章,请观众老爷们批评指正和多多支持!