Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式, Spring Boot 致力于在蓬勃发展的快速应用开发领域 (rapid application development) 成为领导者。

本文主要介绍如何通过Spring Boot框架实现接口开发。

一、准备工作

1. 数据表

我们先准备一张简单的数据表。

CREATE TABLE `tb_user`  (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(30) CHARACTER DEFAULT NULL,
`password` varchar(30) CHARACTER DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ;

INSERT INTO `tb_user` VALUES (1, 'budai', '123456');
INSERT INTO `tb_user` VALUES (2, 'great', '456789');

2. POM依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <optional>true</optional>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
</dependency>
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.1.1</version>
</dependency>

二、文件配置

1. 端口配置

默认 Spring Boot 启动端口是 8080 ,我们可以根据项目的需要在配置文件进行修改,在这我采用的是 yml 格式文件,相较默认的 properties 格式可读性更高。

server:
    port: 9090
    tomcat:
        uri-encoding: utf-8

当然这一步你不设置的话也可以,使用默认端即可。

2. 数据库连接

数据库用的是 mysql ,相关配置如下:

spring:
    datasource:
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://localhost:3306/budai_web_data?useUnicode=true&characterEncoding=utf-8&useSSL=false
        username: root
        password: xxxx

3. Mybatis 绑定

这步就是申明mybatis.xml文件在哪,我对应的数据库配置文件路径为 resource/mysql/ 下。

mybatis:
    mapper-locations: classpath:mysql/*.xml
    configuration:
        log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

其中 configuration 配置的是在控制台打印输出所执行的 sql 命令,方便调试程序。

三、实体类

1. 注解

  • @Data:注解实体类上,提供类所有属性的 getting 和 setting 方法,通过此注解则无需手动生成 get 和 set 方法了,此外还提供了 equals、canEqual、hashCode、toString 方法。
  • @NoArgsConstructor:提供无参构造器。
  • @AllArgsConstructor:提供全参构造器。
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
    private String ID;
    private String userName;
    private String password;
}

四、服务层

1. 接口类

这就没什么好介绍的了,简单定义获取和更新数据的接口。

public interface UserServices {
    
    User get(String ID);

    int update(User user);
}

2. 实现类

  • @Service
    通常作用于接口实现类,若没有指定名称在创建 bean 时名字默认为实现的接口类名称(首字母大写)。
  • @Autowired
    正如其字面意思:自动装配,即自动导入其所依赖的。
@Service("userServices")
public class UserServicesImpl implements UserServices {

    @Autowired
    private UserDao userDao;

    @Override
    public User get(String ID) {
        return userDao.get(ID);
    }

    @Override
    public int update(User user) {
        return userDao.update(user);
    }

}

五、Dao层

1. Mapper接口

可以通过注解的方式来编写对应的数据库逻辑代码,但这里我采用是 XML 文件配置。

@Mapper
public interface UserDao {

    User get(String ID);

    int update(User user);
}

2. MyBatis文件

在 resource/mysql/ 目录下新建 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="xyz.ibudai.mapper.UserMapper">

    <resultMap type="xyz.ibudai.entity.User" id="userResult">
        <id property="ID" column="id" />
        <result property="userName" column="username"/>
        <result property="password" column="password"/>
    </resultMap>

    <select id="get" resultMap="userResult" parameterType="String">
        select * from tb_user
        where id = #{ ID }
    </select>

    <update id="update" parameterType="xyz.ibudai.entity.User">
        update tb_user
        set username = #{ userName }
        and password = #{ password }
        where id = #{ ID }
    </update>

</mapper>

六、控制层

1. 路由注解

  • @RestController
    用于标注控制层组件, 等价于 @ResponseBody 和 @Controller 的组合,只能传输数据无法跳转页面。
  • @RequestMapping
    提供路由信息,负责 URL 到 Controller 中的具体函数的映射。

2. 请求注解

不同的请求方式在 Spring Boot 中对应的注解参考下表:

注解 作用
@GetMapping 对应 HTTP 的 GET 请求,用于获取资源。
@PostMapping 对应 HTTP 的 POST 请求,用于创建资源。
@PutMapping 对应 HTTP 的 PUT 请求,提交所有资源属性以修改资源。
@PatchMapping 对应 HTTP 的 PATCH 请求,提交资源部分修改的属性。
@DeleteMapping 对应 HTTP 的 DELETE 请求,用于删除服务器端的资源。

3. 参数注解

  • @RequestBody
    传入对象,可以将请求体为 JSON 的数据转化为复杂的 Java 对象。
  • @RequestParam
    传入单个值,当参入多个参数时必须用其声明,单个参数则无限制。
  • @PathVariable
    获取传入参数至地址栏,比如:java@GetMapping("/{path}") public int Test(@PathVariable String path){ 假如此时此时传入的参数为 user ,最终的访问url即为:/user。java@RestController @RequestMapping(value = "/users") public class UserController { @Autowired private UserServices userServices; @GetMapping("/get") public String getUser(Integer ID){ return userServices.get(ID).toString(); } @PostMapping("/update") public int updateUser(@RequestBody User user){ int i = 0 ; i = userServices.updateUser(user); return i; } }

七、启动配置

1. @MapperScan

在 DAO 层文件过多时,每个文件都单独添加 @Mapper 显然过于麻烦,通过 @MapperScan 直接配置 DAO 层所在的包即可扫描这个包下的文件。

2. @SpringBootApplication

申明让 Spring Boot 自动给程序进行必要的配置。

@SpringBootApplication
@MapperScan("xyz.ibudai.mapper")
public class DemoApplication {

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