關於數據庫表設計和實體類設計的思考


后端開發最基礎的工作就是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.枚舉值得設置

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM