后端開發最基礎的工作就是CRUD
表設計常見疑惑點:
一、表字段類型和實體類型的對應關系
數據庫常用字段類型為int、bigint、varchar、datetime;
實體最好以integer、String、Date接受。
前后端交互一路都是date類型,輸入:前端傳date類型,后端接受date類型,存到數據庫為datetime類型;輸出:后端查到date類型,以某個日期格式(yyyy-MM-dd hh:mm:ss)傳給前端。
問題1:需要注意,如果參數中有日期格式,以@requestbody接收時,會發生類型轉換錯誤,因為json化之后,時間就是字符串,字符串解析成日期時會出錯。
解決方式1:以@ModalAttribute接受。
解決方式2:定義屬性編輯器
@InitBinder protected void initBinder(WebDataBinder binder) { SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true));
解決方式3:使用兩個注解解決 參考博客https://blog.csdn.net/zhou520yue520/article/details/81348926
@DateTimeFormat決定入參的格式,將字符串參數轉為日期;@JsonFormat決定出參的格式,將日期轉為需要的格式
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")private Date expectationResolveTime;
前端傳時間戳,實體以long類型接受,存庫的時候通過日期函數轉為datetime類型;查詢語句使用日期函數再將日期轉為時間戳。
-------這樣存在的問題是,dataJPA默認的sql是不會做這樣的轉換的,因此如果使用SpringdataJPA,entity的日期類型一定要設計未和數據庫一致,不需要轉換。
二、表的設計
1.主鍵的設置
主鍵設置常見的就是自增和UUID兩種,可以在主鍵策略中設置執行那種策略。
2.日期的設置
日期可以存varchar類型、bigInt類型、datetime。強烈建議設置類型為datatime,很直觀。。。
通常存datetime類型,這樣數據表直觀,對應entity的date類型
3.枚舉值得設置