1、项目背景
在学习过JavaEE中的SpringBoot、SpringMVC以及mybatis后想要巩固所学知识以及在具体实现项目的过程中发现自己的不足之处便想要完成一个基于上述框架的项目。在学习生活中总有朋友会让你帮忙填写问卷调查,在填写完成后回填出一个抽奖页面,当然了每次抽奖的结果大多数是谢谢参与,我想知道具体抽奖的过程是什么以及如何实现。因此我就想完成一个简单抽奖系统。
2、项目功能及演示
(1)用户注册
(2)用户登录
(3)抽奖设置:奖品管理、抽奖人员管理、抽奖
3、技术栈
前端:element-ui + vue.js + axios
数据库: 使用MySQL数据库及Druid数据库连接池
后端框架:SpringBoot + SpringMVC + mybatis
4、 项目的整体流程
第一步:开发环境设置
新建Maven项目,在系统生成的的pom.xml文件中增加自己所需的 的依赖包,完整导入所需依赖包后刷新Maven检查是否报错,没有报错进行准备Springboot配置文件、设计工具类、准备SpringBoot启动类以及进行对Mabatis的配置。
第二步:前端设计
导入自己准备好的前端资源文件(由于本人只会简单的HTML所以前端代码来源于网络。)
第三步:数据库设计
(1)创建数据库以及相应的数据表,根据需要完成的功能需要创建奖项表(award)、抽奖成员表(member)、抽奖设置表(setting)、抽奖记录表(record)、用户表(user)
(2)初始化数据
(数据库涉及部分具体参考给出源码中的db文件夹)
第四步:前后端接口设计
要实现功能,需要先明确前后端约定好的接口。接口的定义一般是前后端约定好的,所以也和前端代码息息相关,前端需要什么数据,需要什么格式的数据,也会在接口中体现。
接口主要体现在
- 请求需要的信息:请求方法,请求路径,请求数据
- 响应数据
用户登录:
请求:
POST api/user/login
Content-Type: application/json
{
username: "bit", password: "123"}
响应:
{
"success" : true
}
由于篇幅所限这里只给出用户登录的请求、响应数据,
第五步:代码设计
(1)设计数据库实体类
(2)设计http请求基类主要针对HTTP请求数据的统一字段设计(扩展设计预留)
package lihan.base;
import lombok.Getter;
import lombok.Setter;
@Setter
@Getter
public class BaseEntity {
}
(3)设计统一响应类
主要为返回数据的统一字段设计
package lihan.base;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
@Getter
@Setter
@ToString
public class ResponseResult {
/**
* 定义异常,返回给前端响应状态码是200
* 前端可以通过success字段,判断是显示正确的业务数据,还是错误码+错误信息
* 前端:
* if(响应数据.success){
* 显示data字段的数据
* }else{
* 显示code错误码+message错误信息
* }
*/
private boolean success;
private Object data;
private String code;
private String message;
private ResponseResult(){
}
//正常返回业务数据
public static ResponseResult ok(Object o){
ResponseResult r = new ResponseResult();
r.success = true;
r.data = o;
return r;
}
//出现异常时,返回的数据
public static ResponseResult error(){
return error("ERR000000", "未知的错误,请联系管理员");
}
public static ResponseResult error(String code, String message){
ResponseResult r = new ResponseResult();
r.code = code;
r.message = message;
return r;
}
}
(4)设计自定义异常类型
主要针对不同的场景,需要抛异常来处理时,能定位业务含义
主要分为
a. 客户端请求错误时的异常:需要给定错误码,方便前端提示用户,如用户名存在不允许注册(只简单实现,不考虑具体字段的报错)
b. 业务发生错误时的异常:需要给定错误码,方便后端定位问题,一般如程序上的业务错误都可以抛(BUG)
c. 系统发生错误时的异常:需要给定错误码,方便后端定位问题,程序出错,如数据库连接获取失败都可以抛(一般是系统发生错误,如网络断了,数据库挂了等等)
自定义异常前端需要显示错误码和错误消息(一般是自己抛的中文异常描述),用户可以根据提示信息判断原因。
package lihan.exception;
import lombok.Getter;
import lombok.Setter;
/**
* 自定义异常的父类
*/
@Getter
@Setter
public class BaseException extends RuntimeException {
private String code;
public BaseException(String code, String message) {
super(message);
this.code = code;
}
public BaseException(String code, String message, Throwable cause) {
super(message, cause);
this.code = code;
}
}
public class BusinessException extends BaseException {
public BusinessException(String code, String message) {
super