🌻🌻目录
- 一、SpringBoot 构建RESTful API
- 1.1 RESTful介绍
- 1.2 RESTful接口设计
- 1.3 用户实体bean创建 User
- 1.4 创建Controller UserController
- 1.5 Postman 测试RESTful 接口
- 二、SpringBoot 使用Swagger2 构建API文档
- 2.1 Swagger2介绍
- 2.2 SpringBoot 开启 Swagger2支持
- 2.3 修改 Controller 增加文档注释
- 2.4 查看Swagger2文档
- 三、SpringBoot Jdbc 操作数据库
- 3.1 SpringBoot 开启jdbc支持
- 3.2 数据库建表
- 3.3 创建实体
- 3.4 编写数据库操作业务接口
- 3.5 编写数据库操作业务实现类
- 3.6 编写Controller
- 3.7 Postman测试RESTful 接口
- 四、SpringBoot 整合Mybatis 操作数据库
- 4.1 SpringBoot 开启Mybatis支持
- 4.2 修改SpringBoot配置文件application.yml
- 4.3 创建实体bean User
- 4.4 创建Dao接口,使用mybatis注解
- 4.5 创建Service接口
- 4.6 创建Service实现类
- 4.7 创建 Controller UserController
- 4.8 修改SpringBoot程序主启动类,增加扫描dao接口
- 4.9 Postman测试RESTful接口
一、SpringBoot 构建RESTful API
1.1 RESTful介绍
RESTful是一种软件架构风格!
REST就是指对同一个URI的资源的不同请求方式(GET,POST,PUT,DELETE
)(表述)下的做出的不同的操作(查,增,改,删),改变的是资源的状态,即表述性状态转移。 一个符合REST风格的URI就可以称之一个RESTful的接口
1.2 RESTful接口设计
在此我们以用户数据的基本操作来进行接口设计
HTTP协议请求方法 | SpringBoot注解 | URL | 功能说明 |
---|---|---|---|
POST | @PostMapping | /users/ | 创建一个用户 |
GET | @GetMapping | /users/ | 查询用户列表 |
GET | @GetMapping | /users/id | 根据id查询一个用户 |
PUT | @PutMapping | /users/id | 根据id更新一个用户 |
DELETE | @DeleteMapping | /users/id | 根据id删除一个用户 |
创建项目 spring-restful 如下:
修改版本:
1.3 用户实体bean创建 User
package com.gansu.pojo;
import java.io.Serializable;
public class User implements Serializable {
private Integer id;
private String name;
private Integer age;
public User() {
}
public User(Integer id, String name, Integer age) {
this.id = id;
this.name = name;
this.age = age;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
'}';
}
}
1.4 创建Controller UserController
package com.gansu.controller;
import com.gansu.pojo.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@RestController
@RequestMapping("/user")
public class UserController {
private List<User> userList = Collections.synchronizedList(new ArrayList<User>()); //为了代替数据库,存数据
/**
* 添加用户(form-data 格式添加)
* @param user
* @return
*/
@PostMapping("/addUser")
public String addUser(User user){
userList.add(user);
return "addUser-ok";
}
/**
* 添加用户(json格式添加)
* @param user
* @return
*/
@PostMapping("/addUser")
public String addUser(@RequestBody User user){
userList.add(user);
return "addUser-ok";
}
/**
* 查询所有用户
* @param user
* @return
*/
@GetMapping("/getUserAll")
public List<User> getUserAll(User user){
return userList;
}
/**
* 通过id查询用户
* @param
* @return
*/
@GetMapping("/getUserById/{id}")
public User getUserById(@PathVariable("id") Integer id){
for (User user : userList) {
if(user.getId().longValue() == id.longValue()){
return user;
}
}
return null;
}
/**
* 通过id修改用户(form-data 形式修改)
* @param user
* @return
*/
@PutMapping("/updateUserById/{id}")
public String updateUserById(@PathVariable("id") Integer id,User user){
for (User user1 : userList) {
if(user1.getId().longValue() == id.longValue()){
user1.setName(user.getName());
user1.setAge(user.getAge());
}
}
return "update-ok";
}
/**
* 通过id修改用户(json形式修改)
* @param user
* @return
*/
@PutMapping("/updateUserById/{id}")
public String updateUserById(@PathVariable("id") Integer id,@RequestBody User user){
for (User user1 : userList) {
if(user1.getId().longValue() == id.longValue()){
user1.setName(user.getName());
user1.setAge(user.getAge());
}
}
return "update-ok";
}
/**
* 通过id删除用户
* @param
* @return
*/
@DeleteMapping("/deleteUserById/{id}")
public String deleteUserById(@PathVariable("id") Integer id){
userList.remove(getUserById(id));
return "delete-ok";
}
}
1.5 Postman 测试RESTful 接口
新增结果显示:http://localhost:8080/user/addUser
查询所有结果显示:http://localhost:8080/user/getUserAll
根据Id查询用户:http://localhost:8080/user/getUserById/1002
根据Id 更新用户:http://localhost:8080/user/updateUserById/1002
json格式修改
根据 Id 删除用户 http://localhost:8080/user/deleteUserById/1003
二、SpringBoot 使用Swagger2 构建API文档
2.1 Swagger2介绍
编写和维护接口文档是每个程序员的职责,前面我们已经写好的接口
现在需要提供一份文档,这样才能方便调用者使用。
考虑到编写接口文档是一个非常枯燥的工作,我们采用Swagger2这套自动化文档工具来生成文档,它可以轻松的整合到Spring Boot中,并与Spring MVC程序配合组织出强大RESTful API文档。
2.2 SpringBoot 开启 Swagger2支持
第一步:在pom.xml中加入Swagger2的依赖
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.2.2</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.2.2</version>
</dependency>
第二步:创建 Swagger2 配置类
package com.gansu.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
@Configuration
@EnableSwagger2
public class SwaggerConfig {
@Bean
public Docket createRestApi() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
.apis(RequestHandlerSelectors.basePackage("com.gansu.controller"))
.paths(PathSelectors.any())
.build();
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("Spring Boot中使用Swagger2构建RESTful APIs")
.description("甘中甘")
.termsOfServiceUrl("https:www.baidu.com")
.contact("Sunny")
.version("1.0")
.build();
}
}
2.3 修改 Controller 增加文档注释
通过
@Api
给类增加说明
通过@ApiOperation
注解来给方法增加说明
通过
@ApiImplicitParams
@ApiImplicitParam
注解来给参数增加说明
package com.gansu.controller;
import com.gansu.pojo.User;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@RestController
@RequestMapping("/user")
public class UserController {
private List<User> userList = Collections.synchronizedList(new ArrayList<User>()); //为了代替数据库,存数据
/**
* 添加用户
* @param user
* @return
*/
@PostMapping("/addUser")
@ApiOperation(value="增加用户", notes="增加用户信息")
public String addUser(@RequestBody User user){
userList.add(user);
return "addUser-ok";
}
/**
* 查询所有用户
* @param
* @return
*/
@GetMapping("/getUserAll")
@ResponseBody
@ApiOperation(value="查询所有用户", notes="查询所有用户信息")
public List<User> getUserAll(){
return userList;
}
/**
* 通过id添加用户
* @param
* @return
*/
@GetMapping("/getUserById/{id}")
@ApiOperation(value="通过用户id查询用户", notes="通过用户id查询用户信息")
public User getUserById(@PathVariable("id") Integer id){
for (User user : userList) {
if(user.getId().longValue() == id.longValue()){
return user;
}
}
return null;
}
/**
* 通过id修改用户
* @param user
* @return
*/
@ApiOperation(value="更新指定id用户信息", notes="根据id更新用户信息")
@PutMapping("/updateUserById/{id}")
public String updateUserById(@PathVariable("id") Integer id,@RequestBody User user){
for (User user1 : userList) {
if(user1.getId().longValue() == id.longValue()){
user1.setName(user.getName());
user1.setAge(user.getAge());
}
}
return "update-ok";
}
/**
* 通过id删除用户
* @param
* @return
*/
@DeleteMapping("/deleteUserById/{id}")
@ApiOperation(value="根据用户id删除用户", notes="根据用户id删除用户信息")
public String deleteUserById(@PathVariable("id") Integer id){
userList.remove(getUserById(id));
return "delete-ok";
}
}
2.4 查看Swagger2文档
重启应用
访问地址:http://localhost:8080/swagger-ui.html
点开每个接口,可以查看接口详情
操作:
三、SpringBoot Jdbc 操作数据库
3.1 SpringBoot 开启jdbc支持
刚才我编写完成了针对用户数据的 RESTful API,但是我们是用集合模拟的数据,在实际工作过程中需要把数据存储到数据库中,接下来完成SpringBoot针对数据库的基本操作。
创建项目:spring-jdbc
坐下修改:增加系统数据库匹配的连接池及其版本
- (1)为了让SpringBoot支持jdbc数据操作,需要修改pom.xml
增加所需的依赖上面创建的时候已经生成了
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jdbc</artifactId>
</dependency>
- (2) jdbc连接数据驱动(本次总结采用MySQL数据库),需要修改pom.xml
增加所需的依赖上面创建的时候已经生成了
注意:因为我电脑上数据库版本比较老,所以这里找了个低版本的连接池
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>
最后修改src/main/resources/application.yml中配置数据源信息
#数据库jdbc连接url地址,serverTimezone设置数据库时区东八区
spring:
datasource:
username: root
password: root
url: jdbc:mysql://localhost:3306/ssm?serverTimezone=GMT%2B8
driver-class-name: com.mysql.jdbc.Driver
3.2 数据库建表
3.3 创建实体
package com.gansu.pojo;
import java.io.Serializable;
public class User implements Serializable {
private Integer id;
private String name;
private Integer age;
public User() {
}
public User(Integer id, String name, Integer age) {
this.id = id;
this.name = name;
this.age = age;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
'}';
}
}
3.4 编写数据库操作业务接口
package com.gansu.service;
import com.gansu.pojo.User;
import java.util.List;
public interface UserService {
public void addUser(User user);
public List<User> getUserAll();
public User getUserById(Integer id);
public void updateUserById(Integer id,User user);
public void deleteUserById(Integer id);
}
3.5 编写数据库操作业务实现类
package com.gansu.service.impl;
import com.gansu.pojo.User;
import com.gansu.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class UserServiceImpl implements UserService {
@Autowired
private JdbcTemplate jdbcTemplate;
@Override
public void addUser(User user) {
jdbcTemplate.update("insert into user " +
"(id,name,age) values (null ,?,?)",user.getName(),user.getAge());
}
@Override
public List<User> getUserAll() {
return jdbcTemplate.query("select * from user",
new BeanPropertyRowMapper<>(User.class));
}
@Override
public User getUserById(Integer id) {
return jdbcTemplate.queryForObject("select * from user where id=?",
new BeanPropertyRowMapper<>(User.class),id);
}
@Override
public void updateUserById(Integer id, User user) {
jdbcTemplate.update("update user set name=?,age=? where id=?",
user.getName(),user.getAge(),id);
}
@Override
public void deleteUserById(Integer id) {
jdbcTemplate.update("delete from user where id = ?",id);
}
}
3.6 编写Controller
package com.gansu.controller;
import com.gansu.pojo.User;
import com.gansu.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
@PostMapping("/addUser")
public String addUser(@RequestBody User user){
userService.addUser(user);
return "addUser-ok";
}
@GetMapping("/getUserAll")
public List<User> getUserAll(){
return userService.getUserAll();
}
@GetMapping("/getUserById/{id}")
public User getUserById(@PathVariable("id") Integer id){
return userService.getUserById(id);
}
@PutMapping("/updateUserById/{id}")
public String updateUserById(@PathVariable("id") Integer id,@RequestBody User user){
userService.updateUserById(id,user);
return "update-ok";
}
@DeleteMapping("/deleteUserById/{id}")
public String deleteUserById(@PathVariable("id") Integer id){
userService.deleteUserById(id);
return "delete-ok";
}
}
3.7 Postman测试RESTful 接口
新增:http://localhost:8080/user/addUser
查询所有:http://localhost:8080/user/getUserAll
根据id查询:http://localhost:8080/user/getUserById/4
根据id修改:http://localhost:8080/user/updateUserById/2
根据 Id删除: http://localhost:8080/user/deleteUserById/3
四、SpringBoot 整合Mybatis 操作数据库
创建项目:springboot-mybatis
降低版本:
4.1 SpringBoot 开启Mybatis支持
添加Mybatis起步依赖以及mysqljdbc驱动、连接池druid驱动
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.0.0</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.10</version>
</dependency>
4.2 修改SpringBoot配置文件application.yml
参考前面
#数据库jdbc连接url地址,serverTimezone设置数据库时区东八区
spring:
datasource:
username: root
password: root
url: jdbc:mysql://localhost:3306/ssm?serverTimezone=GMT%2B8
driver-class-name: com.mysql.jdbc.Driver
4.3 创建实体bean User
拷贝前面(3.3) User
4.4 创建Dao接口,使用mybatis注解
接口方法拷贝前面(3.4)
最终如下:
package com.gansu.dao;
import com.gansu.pojo.User;
import org.apache.ibatis.annotations.*;
import java.util.List;
@Mapper
public interface UserDao {
@Insert("insert into user(name,age) values(#{name},#{age})")
public void addUser(User user);
@Select("select * from user")
public List<User> getUserAll();
@Select("select * from user where id = #{id}")
public User getUserById(Integer id);
@Update("update user set name =#{name},age=#{age} where id = #{id}")
public void updateUserById(User user);
@Delete("delete from user where id =#{id}")
public void deleteUserById(Integer id);
}
4.5 创建Service接口
package com.gansu.service;
import com.gansu.pojo.User;
import java.util.List;
public interface UserService {
public void addUser(User user);
public List<User> getUserAll();
public User getUserById(Integer id);
public void updateUserById(Integer id,User user);
public void deleteUserById(Integer id);
}
4.6 创建Service实现类
package com.gansu.service.impl;
import com.gansu.dao.UserDao;
import com.gansu.pojo.User;
import com.gansu.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserDao userDao;
@Override
public void addUser(User user) {
userDao.addUser(user);
}
@Override
public List<User> getUserAll() {
return userDao.getUserAll();
}
@Override
public User getUserById(Integer id) {
return userDao.getUserById(id);
}
@Override
public void updateUserById(Integer id, User user) {
user.setId(id);
userDao.updateUserById(user);
}
@Override
public void deleteUserById(Integer id) {
userDao.deleteUserById(id);
}
}
4.7 创建 Controller UserController
拷贝前面(3.6) UserController
4.8 修改SpringBoot程序主启动类,增加扫描dao接口
@MapperScan("com.gansu.dao")
4.9 Postman测试RESTful接口
与3.7一样
文章所有源码