1.项目环境
jdk17,后端框架(springboot3),缓存(redis),消息队列(rabbitmq),mysql,日志(logback),安全(JWT令牌)加密
创建项目时候加上相关的依赖注意勾选redis和rabbitmq的
2.业务模块分析
人员业务模块,活动业务模块,奖品业务模块,抽奖业务模块,通知业务模块
3.建库建表
有er图:(后续补充)
通过需求分析以及ui界面分析得出我们需要哪些表,用户表,活动表,奖品表,活动_人员表,活动_奖品表,获取表(人员_活动_奖品),注意建表的时候,需要设置id为主键,并且设置id为唯一索引,还有根据业务创建一些相关的索引,比如活动_人员表,就可以设置建立一个唯一索引(活动id,人员id),还有比如我们也可以设置活动id为一个普通索引,来方便我们后续更好获取,活动信息,用\.来在mysql中快速执行.sql文件来建表建库
4.项目构建
1.添加相应的依赖(mybatis,lombok,redis,rabbitmq)/修改配置文件
2.项目分层:common,controller,service,dao
3.定义公共common模块的部分:状态码,我们需要定义一些状态码,这些状态码,用于统一结果返回(正常统一结果返回获取异常捕获统一结果返回,定义在global异常常量类中)。以及给我们自定义的异常类(code,msg)属性赋值,此项目中异常就是按层来定义的就定义了两种异常。所以我们只需要给这两层写一个错误码的常量类,来区分同一个异常,但是代表的含义不同的逻辑错误




进行统一异常捕获的时候,我们方便打印日志,两种异常类定位是哪一层发生异常,状态码来定位同一层的不同的业务错误逻辑,方便我们调试,用global中错误的状态码返回给前端(前端也方便接收处理一样的错误码),前面细的异常状态码是用于定位问题(给自定义异常类属性赋值使用,并且区分同一个异常不同逻辑错误),后面global异常状态码是返回给前端的 。
定义业务状态码类,ErrorCode(code,msg),因为我们此项目自定义异常按分层定义了两种异常,所以就只需要为这两个异常定义两个状态码常量类来区分同一个异常不同的逻辑错误,还有为统一结果返回定义一个状态码(global),所以就 controller+service+global)
这些分层常量类我们使用接口定义,接口中的字段默认是 public static final 属于常见写法,并且接口不能被实例化,可以防止对象被实例化,我们还需要定义一个总的状态码,里面有一些success状态码(操作成功后返回给前端),error状态码(用于统一异常捕获后返回给前端),以及未知的状态码,在此项目中总的状态码是返回给前端的,而分层的状态码是用于开发过程中更好的定位问题(同一个异常类不同的状态码对应着不同的逻辑错误)
状态码作用:
要么是用于给自定义异常类,属性赋值使用(同一个异常类不同的状态码对应着不同的逻辑错误)
要么是统一结果返回的时候{code,messag,data}赋值使用(正常统一结果返回或者异常捕获统一结果返回)
4.定义异常类:此项目按分层来定义异常就定义两种异常controller层和service层的异常,注意我们需要用getset方法加上@Data后他会重写equals和hashcode方法,但是如果他是继承于父类,此时那两个方法是不带他父类的属性的,后续可能会出现一些问题,所以我们需要加上@EqualsAndHashCode,即可带上父类的属性

我们为类写上一些构造方法后,需要添加上一个无参的构造方法,不然有可能会报出一些奇怪的问题(为了序列化)
5.定义统一结果返回的类,建立common.pojo,建立一个统一结果返回的泛型类带上(int code,String msg,T data)写一些静态泛型方法来快速构建统一放回结果的对象,因为他是需要在http协议中来传输需要进行各种序列化,我们可以让他实现Serializable接口,使得 CommonResult<T> 对象可以被序列化为多种格式,如 JSON或XML,⽅便⽹络传输。

