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