一,需求包
aop: 存放aop类,一般拦截器等放在该文件夹
config: 存放对配置类
controller 存放controller控制类
mapper: 存放mapper接口
pojo: 存放实体类
service: 存放service业务层接口及对应的实现类
util: 存放自定义的工具类
vo: 存放后端传给前端的数据类型的包装类,及将后端或得的数据通过该类包装后传给前端
二,需求类
1.BasePojo类
位置:pojo包下
说明:因为本项目每个数据库的数据都需要创建时间和更新时间以及序列化,如果在每个实体类都添加创建时间和更新时间的属性,显然麻烦且多余。故写该所有实体类的父类,每个实体类创建时继承一下就好。
//pojo基类,完成2个任务,2个日期,实现序列化
@Data
@Accessors(chain=true)
public class BasePojo implements Serializable{
@TableField(fill = FieldFill.INSERT)
private Date created; //表示入库时需要赋值
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updated; //表示入库/更新时赋值.
}
2.MyMetaObjectHandler类
位置:config包下
说明:MP用法,MetaObjectHandler接口实现类,MetaObjectHandler官方说法:元对象字段填充控制器。同上,因为每个对象在执行插入和更新操作的时候都需要封装当时的时间,麻烦且多余,在这里编写该类,交给Spring管理,每次插入和更新就会自动往数据库里更新时间
@Component //将该对象交给Spring管理
public class MyMetaObjectHandler implements MetaObjectHandler {
//完成新增入库操作应该如何填充 created/updated
@Override
public void insertFill(MetaObject metaObject) {
Date date = new Date();
this.setFieldValByName("created",date,metaObject);
this.setFieldValByName("updated",date,metaObject);
}
//完成修改操作应该如何填充 updated
@Override
public void updateFill(MetaObject metaObject) {
this.setFieldValByName("updated",new Date(),metaObject);
}
}
3.SysResult类
位置:vo包下
说明:后端传输的不仅只是数据,后端通过该类后包装后将数据传给前端,有状态,服务器提示信息,数据三个字段
@Data
@Accessors(chain = true)
@NoArgsConstructor
@AllArgsConstructor
public class SysResult implements Serializable {
private Integer status; //200业务成功 201业务失败
private String msg; //服务器提示信息
private Object data; //封装后返回值
public static SysResult fail() {
return new SysResult(201,"业务执行失败",null);
}
public static SysResult fail(String msg) {
return new SysResult(201,msg,null);
}
public static SysResult success() {
return new SysResult(200,"业务执行成功",null);
}
public static SysResult success(Object data) {
return new SysResult(200,"业务执行成功",data);
}
public static SysResult success(String msg,Object data) {
return new SysResult(200,msg,data);
}
}
4.SystemAOP类
位置:aop包下
说明:因为每个程序都会有程序报错的时候,一般的解决方案是使用try-catch来处理报错,然而,有这么多类方法,他们的处理方法又基本一致,所以这里用到aop切面的方法,进行统一的处理。
/**
* RestControllerAdvice注解的作用:
* 1.该注解只拦截Controller层抛出的异常的信息!
* controller --- service ----- Mapper 异常向上抛出
* 2.需要配合指定异常的类型。
* ExceptionHandler注解中的参数是只在该类型的报错才启动
*/
@RestControllerAdvice
public class SystemAOP {
@ExceptionHandler({RuntimeException.class, SQLException.class})
public SysResult exception(Exception e) {
//控制台打印异常
e.printStackTrace();
return SysResult.fail();
}
}