Spring Boot 是一种基于 Spring 框架的轻量级应用程序框架,它可以简化 Spring 应用程序的开发过程。小程序后台是为小程序提供数据支持和业务逻辑处理的后端服务,本文将介绍如何使用 Spring Boot 开发小程序后台。
一、创建Spring Boot项目
1.1. 创建项目
使用 IDEA 创建一个 Spring Boot 项目,选择「Spring Initializr」快捷方式。然后按照向导的提示输入项目的基本信息,选择相关的依赖项,创建项目。
1.2. 添加依赖
在 pom.xml 文件中添加以下依赖项:
```
```
上面的依赖项包括了 Spring Boot、fastjson、Druid 和 MySQL Connector/J。
fastjson 是阿里巴巴的一个高性能 JSON 库,能够将 Java 对象转换为 JSON 格式。
在本项目中,我们选择使用 Druid 作为数据源连接池。它是阿里巴巴开源的一个 JDBC 连接池,拥有监控和防御 SQL 注入攻击等特性。
二、编写主程序启动类
@SpringBootApplication 注解表示该类是 Spring Boot 应用程序的启动入口。
```
@SpringBootApplication
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
}
```
三、实现数据库连接
在 application.properties 文件中,添加数据库连接信息:
```
spring.datasource.url=jdbc:mysql://localhost:3306/test?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.initial-size=1
spring.datasource.max-active=20
spring.datasource.min-idle=1
spring.datasource.max-wait=60000
spring.datasource.test-on-borrow=true
spring.datasource.test-on-return=false
spring.datasource.test-while-idle=true
spring.datasource.validation-query=SELECT 1
```
其中 url、username、password 需要做对应修改。请注意修改驱动程序类名,配置初始连接数、最大连接数等。
四、实现操作数据库的 DAO 层
在 src/main/java 目录下创建包名为 com.example.dao 的包,新建 UserDAO 接口:
```
@Mapper
@Repository
public interface UserDAO {
/**
* 根据用户ID查询用户
* @param id 用户ID
* @return 查询结果
*/
User queryById(Long id);
/**
* 查询所有用户
* @return 查询结果
*/
List
/**
* 查询用户总数
* @return 查询结果
*/
int countAll();
/**
* 添加用户
* @param user 用户对象
* @return 返回添加结果
*/
int addUser(User user);
/**
* 修改用户信息
* @param user 用户对象
* @return 返回修改结果
*/
int modifyUser(User user);
/**
* 删除用户
* @param id 用户ID
* @return 返回删除结果
*/
int deleteUser(Long id);
}
```
注解 @Mapper 表示这是一个 Mybatis 的 Mapper 接口。@Repository 表示是 Spring 的 bean,会先在项目启动后初始化一边 bean,使用时直接注入即可。
在 src/main/java 目录下创建包名为 com.example.entity 的包,新建 User 实体类:
```
public class User {
private Long id;
private String userName;
private String password;
private String avatarUrl;
private String gender;
private String phone;
private Date createTime;
private Date updateTime;
// getter 和 setter 略
}
```
注解 @Data 自动为 User 类添加 getter 和 setter 方法。
在 src/main/resources 目录下创建 mapper 目录,在 mapper 目录下新建 UserMapper.xml 文件。
```
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
select
id,
user_name as userName,
password,
avatar_url as avatarUrl,
gender,
phone,
create_time as createTime,
update_time as updateTime
from users
where id = #{id,jdbcType=BIGINT}
select
id,
user_name as userName,
password,
avatar_url as avatarUrl,
gender,
phone,
create_time as createTime,
update_time as updateTime
from users
order by id
select count(*) from users
insert into users (
user_name,
password,
avatar_url,
gender,
phone,
create_time,
update_time
) values (
#{userName,jdbcType=VARCHAR},
#{password,jdbcType=VARCHAR},
#{avatarUrl,jdbcType=VARCHAR},
#{gender,jdbcType=VARCHAR},
#{phone,jdbcType=VARCHAR},
#{createTime,jdbcType=TIMESTAMP},
#{updateTime,jdbcType=TIMESTAMP}
)
update users
set user_name = #{userName, jdbcType=VARCHAR},
password = #{password, jdbcType=VARCHAR},
avatar_url = #{avatarUrl, jdbcType=VARCHAR},
gender = #{gender, jdbcType=VARCHAR},
phone = #{phone, jdbcType=VARCHAR},
create_time = #{createTime, jdbcType=TIMESTAMP},
update_time = #{updateTime, jdbcType=TIMESTAMP}
where id = #{id, jdbcType=BIGINT}
delete from users where id = #{id, jdbcType=BIGINT}
```
通过 XML 文件,我们将 DAO 层的方法和 SQL 语句对应起来。
五、实现业务逻辑层
在 src/main/java 目录下创建包名为 com.example.service 的包。新建 UserService 接口:
```
public interface UserService {
/**
* 根据用户ID查询用户
* @param id 用户ID
* @return 查询结果
*/
User queryById(Long id);
/**
* 查询所有用户
* @return 查询结果
*/
List
/**
* 查询用户总数
* @return 查询结果
*/
int countAll();
/**
* 添加用户
* @param user 用户对象
* @return 返回添加结果
*/
int addUser(User user);
/**
* 修改用户信息
* @param user 用户对象
* @return 返回修改结果
*/
int modifyUser(User user);
/**
* 删除用户
* @param id 用户ID
* @return 返回删除结果
*/
int deleteUser(Long id);
}
```
创建 UserServiceImpl 类实现 UserService 接口:
```
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserDAO userDAO;
@Override
public User queryById(Long id) {
return userDAO.queryById(id);
}
@Override
public List
return userDAO.queryAll();
}
@Override
public int countAll() {
return userDAO.countAll();
}
@Override
public int addUser(User user) {
Date now = new Date();
user.setCreateTime(now);
user.setUpdateTime(now);
return userDAO.addUser(user);
}
@Override
public int modifyUser(User user) {
user.setUpdateTime(new Date());
return userDAO.modifyUser(user);
}
@Override
public int deleteUser(Long id) {
return userDAO.deleteUser(id);
}
}
```
注解 @Service 表示该类是 Spring 的 bean。
六、实现API接口
在 src/main/java 目录下创建包名为 com.example.controller 的包,并新建 UserController 类。
```
@RestController
@RequestMapping("/users")
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/queryById")
public User queryById(@RequestParam("id") Long id) {
return userService.queryById(id);
}
@PostMapping("/addUser")
public int addUser(@RequestBody User user) {
return userService.addUser(user);
}
@PostMapping("/modifyUser")
public int modifyUser(@RequestBody User user) {
return userService.modifyUser(user);
}
@DeleteMapping("/deleteUser")
public int deleteUser(@RequestParam("id") Long id) {
return userService.deleteUser(id);
}
}
```
注解 @RestController,声明该类是一个 RESTful 风格的控制器类。@RequestMapping 表示路由映射,我们的接口路径会加上 /users 前缀。
七、启动应用程序
在 App 类中添加注解 @EnableSwagger2 和 @MapperScan:
```
@SpringBootApplication
@EnableSwagger2
@MapperScan("com.example.dao")
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
}
```
注解 @EnableSwagger2 开启 Swagger API 文档生成器。注解 @MapperScan 扫描 Mybatis 的 Mapper 接口。
在 IntelliJ IDEA 中运行应用程序,应该就能顺利在浏览器中访问 http://localhost:8080/users/queryById?id=1000,来获取 ID 为 1000 的用户信息。
八、使用 Swagger2 生成API文档
在 pom.xml 中添加如下依赖:
```
```
在 UserController 类中,添加注解即可:
```
@RestController
@RequestMapping("/users")
@Api(tags = "用户管理接口")
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/queryById")
@ApiOperation(value = "根据用户ID查询用户", notes = "根据用户ID查询用户信息")
public User queryById(@RequestParam("id") Long id) {
return userService.queryById(id);
}
@PostMapping("/addUser")
@ApiOperation(value = "添加用户", notes = "添加用户信息")
public int addUser(@RequestBody User user) {
return userService.addUser(user);
}
@PostMapping("/modifyUser")
@ApiOperation(value = "修改用户信息", notes = "修改用户信息")
public int modifyUser(@RequestBody User user) {
return userService.modifyUser(user);
}
@DeleteMapping("/deleteUser")
@ApiOperation(value = "删除用户", notes = "根据用户ID删除用户信息")
public int deleteUser(@RequestParam("id") Long id) {
return userService.deleteUser(id);
}
}
```
在 main 方法上添加如下 Swagger2 的配置类:
```
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 Swagger2 {
@Bean
public Docket createRestApi() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
.apis(RequestHandlerSelectors.basePackage("com.example.controller"))
.paths(PathSelectors.any())
.build();
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("Spring Boot 实现小程序后台")
.description("小程序后台 API 文档")
.version("1.0.0")
.build();
}
}
```
启动项目访问 http://localhost:8080/swagger-ui.html 即可查看API文档。
至此,我们使用