项目1总结其一
做好一个项目,数据库的设计尤为关键。
这里补充回忆一下数据库三大范式
- 1NF:每一列都不可分,是独立的
- 2NF:非主键列完全依赖于主键,eg:商品单价只跟商品编号有关,而如果在订单表里则不能将单价写上,否则不满足2nf
- 3NF:非主键列直接依赖于主键,跟2nf区别是,2NF下,只要信息跟主键有关就行,但是3NF光有关还不行,必须得独立的有关,也就是说编号性质的一般可以符合,但是像属性这种东西,即使符合在主键下是唯一的,如果也受另一非主键影响的话,就不是3NF
我们设计数据库,尽量在2NF及以上。仅仅满足1NF是混乱的
我的数据库共有9张表:
预期目标是创建一套逻辑闭环的F1经理模拟系统
说一下我自认为的巧思:
1、利用用户表来模拟一个用户操纵多个车队的情况
2、利用request里的content存储json数据,将非管理员用户的申请数据保存在里面,就可以实现一个简单的审批流
3、每张表保留着createdAt和updatedAt这两个自动生成的字段,严谨
4、每个表完全依赖于主键
数据库是项目立足的根本之一,因此要着重注意其设计。
转到后端设计上,选择SpringBoot作为开发脚手架,注解解释型的开发,面向接口的编程,逻辑性强的同时开发速度也快!
立项之初就是这些思考吧,当然导入一些工具包工具类的也要做,这些就不用思考了
首先看pom文件
1、spring-boot-starter-web Web应用项目基础
2、mybatis-spring-boot-starter 操作数据库
3、java-jwt 用于生成jwt密钥
4、jasypt 用于加解密数据库字段
5、fastjson2 序列化反序列化JSON操作
6、spring-boot-starter-validation 验证属性
7、easy-captcha 验证码
8、spring-boot-starter-cache spring官方缓存
9、spring-boot-starter-data-redis redis缓存
10、spring-boot-starter-aop 面向切面编程,是许多操作的基础
11、mybatis-plus-jsqlparser mybatis-plus-spring-boot3-starter 简化mybatis对于单表的复杂
12、spring-boot-devtools 热加载
13、mysql-connector-j 数据库连接核心
14、lombok 简化DTO层开发
15、spring-boot-starter-test 测试
16、mybatis-spring-boot-starter-test 同上
17、spring-boot-starter-data-jpa 集成数据库事务以及枚举类型声明
以下是返回给后端数据的封装类
@Data
@ToString
@NoArgsConstructor
public class Result{/*** 状态码*/private Integer code;/*** 消息*/private String msg;/*** 数据*/private Object data;/***/public static Result success() {return success(0, null, null);}/***/public static Result success( int code) {return success(code, null, null);}/***/public static Result success( String msg) {return success(0, msg, null);}/***/public static Result success( Object data) {return success(0, null, data);}/***/public static Result success( String msg, Object data) {return success(0, msg, data);}/***/public static Result success( int code, String msg, Object data) {Result result = new Result();result.setCode(code);result.setMsg(msg);result.setData(data);return result;}/***/public static Result error() {return error(-1, "服务器发生错误, 请求联系管理员");}/***/public static Result error( String msg) {return error(-1, msg);}/***/public static Result error( int code, String msg) {Result result = new Result();result.setCode(code);result.setMsg(msg);return result;}// 将当前对象转换成JSON格式的字符串public String toJson() throws JsonProcessingException {ObjectMapper mapper = new ObjectMapper();return mapper.writeValueAsString(this);}
}
自定义异常:
public class F1Exception extends RuntimeException {public F1Exception(String message) {super(message);}
}