弱小和无知不是生存的障碍,傲慢才是。 ——《三体》
文章目录
- 引言
- 创建 SpringBoot 项目
- 创建POJO类
- 创建 M-V-C
- M: 通用Mapper
- C: 创建业务
- V: 创建对应 Controller
- 集成测试
- 单元测试
引言
作者在校内项目开发过程中,总结了基于SpringBoot的Web后端项目快速成型流程。本文旨在讨论作者的开发经验,为同为新手的开发者提供参考,同时希望有经验的工程狮大大垂阅斧正。
创建 SpringBoot 项目
使用 IDEA 创建 Spring Initializr 项目,并填写配置。
- IDEA中自动配置的初始 pom 依赖包括 :spring-boot-starter-web, spring-boot-starter-test
- 配置application.yml (properties) 文件,写入全局配置,如服务器端口,日志级别。
###### Tomcat server ######
server:
port: 8080
###### log ######
logging:
level:
com.itheima: debug # 系统内日志级别
org.springframework: info # spring 日志级别
创建POJO类
在 pojo 包中创建实体类 (使用 Lombok 简化实体类)
- (IDEA上安装 Lombok 插件,使 IDEA 可以识别 lombok 注解)
- 引入 lombok 依赖
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
- 创建实体类 (User)
@Data // lombok注解
public class User {
private Long id;
private String userName;
private String password;
private String name;
private Integer age;
private Integer sex;
private Date birthday;
private String note;
private Date created;
private Date updated;
}
创建 M-V-C
M: 通用Mapper
通过注解方式,将实体类改造成 ORM 模型,并创建 Mapper
- 添加通用 Mapper 启动器依赖
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-spring-boot-starter</artifactId>
<version>2.1.5</version>
</dependency>
- 修改实体类,添加
@Table
,@Id
,@Column
等注解
@Data
@Table(name = "tb_user") // 映射到表
public class User {
@Id // 主键
@KeySql(useGeneratedKeys = true) // 主键回填
private Long id;
/* 正常命名时,不需要 @Column */
private String userName;
private String password;
private String name;
private Integer age;
private Integer sex;
private Date birthday;
private String note;
private Date created;
private Date updated;
}
- 创建模型对应的 Mapper (接口),继承 tk 中的 Mapper
public interface UserMapper extends Mapper<User> {}
- 在系统启动器上添加 tk 的Mapper扫描注解
@MapperScan
,传入Mapper包1
@SpringBootApplication
@MapperScan("com.itheima.mapper")
public class HeimaSpringbootApplication {
public static void main(String[] args) {
SpringApplication.run(HeimaSpringbootApplication.class, args);
}
}
C: 创建业务
创建 Service
- 在 service 包中创建对应的 Service 。添加
@Service
注解 - 在该 Service 中注入对应的 Mapper
@Service
public class UserService {
private UserMapper userMapper;
@Autowired(required = false)
public void setUserMapper(UserMapper userMapper) {
this.userMapper = userMapper;
}
/**
* 根据 id 查询用户
* @param id 目标 id
* @return 结果用户
*/
public User queryById(Long id) {
return userMapper.selectByPrimaryKey(id);
}
/**
* 插入用户
* @param user 插入用户
*/
public void addUser(User user) {
System.out.println("新增用户...");
userMapper.insertSelective(user);
}
}
V: 创建对应 Controller
- 在 controller 包中创建对应 Controller,添加
@RestController
注解 - 注入所需组件(Service 等)
- 在各方法上添加对应请求注解 (
@RequestMapping
/@GetMapping
etc. )
@RestController
public class HelloController {
private DataSource dataSource;
private UserService userService;
@Autowired
public void setDataSource(DataSource dataSource) {
this.dataSource = dataSource;
}
@Autowired
public void setUserService(UserService userService) {
this.userService = userService;
}
@GetMapping("hello")
public String hello() {
System.out.println("DataSource: " + dataSource);
return "Hello Spring Boot你好";
}
/**
* 根据用户id,查询用户
* @param id 用户id
* @return 用户
*/
@GetMapping("/user/{id}")
public User queryById(@PathVariable Long id) {
return userService.queryById(id);
}
}
至此,系统的 User MVC 开发完成
集成测试
运行或调试整个系统的启动器,即可测试系统的运行状况
单元测试
使用 JUnit 5 对业务进行单元测试
- 打开要测试的 Service,在类名上按 Ctrl + Shift + T ,创建测试类
- 在类上添加
@SpringBootTest
注解2 - 在 Service 的测试类中使用
@Autowired
注入 Service 对象 - 在各方法中编写测试逻辑,如:
@Test
void queryById() {
User user = userService.queryById(1L);
System.out.println("User: " + user);
}
- 运行类或方法进行测试
- 也可以选择在每个Mapper接口上添加
@Mapper
注解,但这种方式会添加大量多余的注解 ↩︎ - 在 JUnit 4 中,此处要在该注解前添加
@RunWith(SpringRunner.class)
注解 ↩︎