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

後端開發最基礎的工做就是CRUD前端

表設計常見疑惑點:java

1、表字段類型和實體類型的對應關係sql

       數據庫經常使用字段類型爲int、bigint、varchar、datetime;數據庫

  實體最好以integer、String、Date接受。json

先後端交互一路都是date類型,輸入:前端傳date類型,後端接受date類型,存到數據庫爲datetime類型;輸出:後端查到date類型,以某個日期格式(yyyy-MM-dd hh:mm:ss)傳給前端。後端

問題1:須要注意,若是參數中有日期格式,以@requestbody接收時,會發生類型轉換錯誤,由於json化以後,時間就是字符串,字符串解析成日期時會出錯。編輯器

  解決方式1:以@ModalAttribute接受。函數

  解決方式2:定義屬性編輯器spa

@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.net

@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的日期類型必定要設計未和數據庫一致,不須要轉換。

2、表的設計

1.主鍵的設置

主鍵設置常見的就是自增和UUID兩種,能夠在主鍵策略中設置執行那種策略。

2.日期的設置

日期能夠存varchar類型、bigInt類型、datetime。強烈建議設置類型爲datatime,很直觀。。。

一般存datetime類型,這樣數據表直觀,對應entity的date類型

3.枚舉值得設置

相關文章
相關標籤/搜索