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.yml
与 application-test.yml
两份配置文件,则在 application中.yml
通过下述配置即可实现仅 application-dev.yml
配置生效。
spring:
profiles:
active: dev
当然你可以同时设置激活多个配置文件,通过逗号分隔,定义次序越后面则优先级越高,若重复时则优先级高的将会覆盖优先级低。
spring:
profiles:
active: common,dev
三、实体类
1. 注解方法
之前 Maven
依赖中导入的 lombak
即提供了注解生成 getter
与 setter
方法,让代码更简洁。
常用的注解如下:
注解 | 作用 |
---|---|
@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
提供路由信息,负责 URL
到 Controller
中的具体函数的映射。
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);
}
}
源码: