SpringBoot项目整合常用场景和开发工具
本篇文章主要整合一些 SpringBoot 项目常用的场景和开发工具,希望观众老爷们多多支持!
1. 起步:创建 SpringBoot 项目
1.1. 创建初始项目
- 选择新建项目->创建
Maven项目,选择JDK1.8->下一步

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

1.2. Maven 配置
在创建的项目中进行 Maven 配置。
- 添加父工程
<parent>
<artifactId>spring-boot-starter-parent</artifactId>
<groupId>org.springframework.boot</groupId>
<version>2.6.5</version> <!--指定SpringBoot的版本-->
</parent>
- 添加依赖
<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";
}
}
注意
@Controller注解,用于将Controller层类交给Spring IOC容器进行管理。@RequestMapping注解 ,表示请求映射,可指定请求地址和请求的方式@ResponseBody注解,在SpringBoot中,Controller层代码,返回字符串的话,默认是进行页面的跳转(模板);通过该注解,可将返回值变为响应体,进行数据的返回。该注解也可标注在类上,那么该类中的所有请求方法都返回数据。
1.5. 启动项目,进行测试
由于 SpringBoot 内嵌了 Tomcat web server,启动我们创建的 SpringBoot 启动类即可

通过图片的红框处,我们可以指定 Tomcat 服务器的默认地址为 localhost:8080
我们打开浏览器访问 localhost:8080/hello 试试看

1.6. 项目打包部署
SpringBoot 项目,如何进行打包,并进行部署
- 添加
Maven打包插件
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
- 进行打包

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

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

- 在服务器上,需要将
jar包上传到服务器,打开终端,安装Java环境,使用命令进行部署即可。
1.7. 快速构建 SpringBoot 项目
通过 idea 中创建项目的 Spring Initializr 进行快速创建
- 选择
Spring Initializr指定项目名称、组、工件、软件包名称、Java版本、打包方式

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

- 点击完成,即可创建初始化项目
2. 项目热部署
SpringBoot 为我们提供了一个方便我们开发测试的工具 dev-tools。使用后可以实现热部署的效果。当我们运行程序后对程序进行了修改,程序会自动重启部署。
原理是使用了两个 ClassLoader,一个 ClassLoader加载哪些不会改变的类(第三方jar包),另一个 ClassLoader加载会更改的类,称之为 Restart ClassLoader;这样在有代码更改的时候,原来的 Restart ClassLoader被丢弃,重新创建一个 Restart ClassLoader,由于需要加载的类相对较少,所以能够实现较快的重启时间。
2.1. 准备工作
- 设置
IDEA自动编译,在IDEA中的设置中进行配置,打开设置后,搜索输入compiler(编译器),打开勾选Bulid project automatically(自动构建项目),然后应用即可

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

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

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. 使用
- 添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>

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

然后就可以在 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有比较大的不同。

从上面可以看出 JUnit5由 Junit Platform、Junit Jupiter和 Junit Vintage组成。
Junit Platform是JUnit提供的平台功能模块,通过它,其他的测试引擎也可以接入。Junit Jupiter是JUnit5的核心,是一个基于JUnit Platform的引擎实现,它包含许多丰富的新特性来使得自动化测试更加方便和强大。Junit Vintage是兼容JUnit3、JUnit4版本的测试引擎,使得旧版本的自动化测试也可以在JUnit5下正常运行。
虽然 JUnit5包含了 JUnit Vintage来兼容JUnit3、JUnit4,但是 SpringBoot 2.4以上版本对应的 spring-boot-starter-test移除了对 Vintage的依赖。所以相对于SpringBoot 2.4以上版本不兼容
JUnit3、JUnit4。
那么我们只需要在 pom.xml文件中引入 Vintage依赖,即可兼容使用JUnit3、JUnit4的老项目了。
<dependency>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
<scope>test</scope>
</dependency>
注意
- 在
JUnit4的SpringBoot项目中,需要添加@SpringBootTest()和@RunWith(StringRunner.class)注解,才能使用Spring容器管理的Bean。
4. 整合 MyBatis
4.1. 数据准备
首先我们使用 MySQL创建一个数据库 tests。
create database tests;
use tests
然后创建一个表 user,添加字段 id、name、age、sex。
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, '男');

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
- 引入依赖
<!--引入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>
- 在
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 # 驱动
- 配置 mybatis 相关配置
mybatis:
mapper-locations: classpath:mapper/*Mapper.xml # mapper映射文件路径
type-aliases-package: com.yanghi.start.bean # 配置具体包下类具有默认别名,不需要写实体类的完整路径
然后在 resources 文件夹下,创建 mapper 文件夹,用于书写映射文件。

- 在
com.yanghi.start包下创建mapper包,并创建UserMapper接口
@Mapper
public interface UserMapper {
/**
* 获取User表的全部用户信息
* @return 集合
*/
List<User> getAllUsers();
}
- 在
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
- 在
UserMapper接口上按住Alt + Enter生成测试即可
@SpringBootTest
class UserMapperTest {
@Autowired
private UserMapper userMapper;
@Test
void getAllUsers() {
List<User> allUsers = userMapper.getAllUsers();
System.out.println(allUsers);
}
}

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
- 首先在·
IDEA插件商品中搜索Lombok,进行安装。

- 在项目
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注解在类上,生成hashCode和equals方法。@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);
总结
本篇文章只介绍一些简单的使用,具体的详解,请期待以后的文章,请观众老爷们批评指正和多多支持!
转载自:https://juejin.cn/post/7150674718763745293