Spring Boot RESTful开发教程


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依赖

新建 Spring Boot 项目,在工程的 pom.xml 配置中导入下述依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.1.1</version>
</dependency>

<!-- MySQL JDBC 连接驱动 -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.33</version>
</dependency>

<!-- 提供实体 Get Set 方法-->
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.34</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

同时添加下述配置申明 MyBatis 映射文件在哪,例如我的配置文件路径为 resource/mysql/ 下,因此配置的为 classpath:mysql/*.xml,表示 mysql 目录下所有 xml 文件。

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

其中 configuration 配置的是在控制台打印输出所执行的 sql 命令,方便调试程序,如果你想要控制台更加清爽则注释该配置即可。

3. 多文件配置

当项目工程变得庞大以及涉及多环境时,通常我们会采用多配置文件进行切换。

例如在 resources 下定义了 application-dev.ymlapplication-test.yml 两份配置文件,则在 application中.yml 通过下述配置即可实现仅 application-dev.yml 配置生效。

spring:
  profiles:
    active: dev

当然你可以同时设置激活多个配置文件,通过逗号分隔,定义次序越后面则优先级越高,若重复时则优先级高的将会覆盖优先级低。

spring:
  profiles:
    active: common,dev

三、实体类

1. 注解方法

之前 Maven 依赖中导入的 lombak 即提供了注解生成 gettersetter 方法,让代码更简洁。

常用的注解如下:

注解 作用
@Data 提供类所有属性的 get 和 set 方法。
@NoArgsConstructor 提供无参构造器。
@AllArgsConstructor 提供全参构造器。

下面为之前的数据表创建对应的实体类,并通过 lombak 生成基本方法。

@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. 实现类

(1) @Service

通常作用于接口实现类,若没有指定名称在创建 bean 时名字默认为实现的接口类名称(首字母大写)。

(2) @Autowired

正如其字面意思:自动装配,即自动导入其所依赖的 bean

@Service
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. 路由注解

(1) @RestController

用于标注控制层组件, 等价于 @ResponseBody @Controller 的组合,只能传输数据无法跳转页面。

(2) @RequestMapping

提供路由信息,负责 URLController 中的具体函数的映射。

2. 请求注解

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

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

3. 参数注解

(1) @RequestBody

传入对象,可以将请求体为 JSON 的数据转化为复杂的 Java 对象。

(2) @RequestParam

传入单个值,当参入多个参数时必须用其声明,单个参数则无限制。

(3) @PathVariable

获取传入参数至地址栏,比如:

@GetMapping("/{path}")
public int Test(@PathVariable String path){

假如此时此时传入的参数为 user ,最终的访问 url 即为:/user

@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);
    }
}

源码:

  1. Spring Boot RESTful

文章作者: 烽火戏诸诸诸侯
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 烽火戏诸诸诸侯 !
  目录