弱小和无知不是生存的障碍,傲慢才是。 ——《三体》


文章目录

  • 引言
  • 创建 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

  1. 添加通用 Mapper 启动器依赖
<dependency>
    <groupId>tk.mybatis</groupId>
    <artifactId>mapper-spring-boot-starter</artifactId>
    <version>2.1.5</version>
</dependency>
  1. 修改实体类,添加 @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;

}
  1. 创建模型对应的 Mapper (接口),继承 tk 中的 Mapper
public interface UserMapper extends Mapper<User> {}
  1. 在系统启动器上添加 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

  1. 在 service 包中创建对应的 Service 。添加 @Service 注解
  2. 在该 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

  1. 在 controller 包中创建对应 Controller,添加 @RestController 注解
  2. 注入所需组件(Service 等)
  3. 在各方法上添加对应请求注解 ( @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 对业务进行单元测试

  1. 打开要测试的 Service,在类名上按 Ctrl + Shift + T ,创建测试类
  2. 在类上添加 @SpringBootTest注解2
  3. 在 Service 的测试类中使用 @Autowired 注入 Service 对象
  4. 在各方法中编写测试逻辑,如:
@Test
void queryById() {
    User user = userService.queryById(1L);
    System.out.println("User: " + user);
}
  1. 运行类或方法进行测试

  1. 也可以选择在每个Mapper接口上添加 @Mapper 注解,但这种方式会添加大量多余的注解 ↩︎
  2. 在 JUnit 4 中,此处要在该注解前添加 @RunWith(SpringRunner.class) 注解 ↩︎