【版權聲明】未經博主同意,謝絕轉載!(請尊重原創,博主保留追究權) https://www.cnblogs.com/cnb-yuchen/p/17977495 出自【進步*於辰的博客】 之前使用SSM+JSP做網站開發,由於沒有註意setter、getter的隱式調用問題,出現了多次bug,對開發進 ...
【版權聲明】未經博主同意,謝絕轉載!(請尊重原創,博主保留追究權)
https://www.cnblogs.com/cnb-yuchen/p/17977495
出自【進步*於辰的博客】
目錄之前使用SSM+JSP做網站開發,由於沒有註意setter、getter的隱式調用問題,出現了多次bug,對開發進度影響挺大。因此,特來作這篇文章跟大家分享,幫在使用SSM開發的博友們避避坑。
參考筆記三,P31.1。
1、setter
隱式調用時機:
1、查詢數據,調用無參構造方法創建實例後
2、getter
隱式調用時機:
1、EL表達式
2、使用@ResponseBody時
3、<if>、<when>等標簽
4、ajax得到的響應體是實體,獲取屬性時
5、sql語句內的 #{xx}、${xx}
對第5點說明:
#{xx}/${xx}
都隱式調用了getter,而不是根據屬性名調用。- 當
xx
對應的類型是 Date,即獲取的是時間時,一般為了EL表達式顯示,會重寫getter,並將返回值類型改為 String;(當然這已經不是重寫) - 如果這樣“重寫”了getter,必須判斷是否為
null
。原因不是為了EL表達式顯示,因為當為null
時,EL表達式不會報錯;而是因為返回的時間字元串必然是通過 SimpleDateFormat 等類由時間轉換而來,轉換時,若時間為null
,拋出異常。
大家看完上述說明,一定有一個疑惑:“你重寫了 Date 類型屬性的getter,例如插入時,#{xx}
獲取時間,得到的不就是 String,而資料庫欄位類型是時間類型,怎麼能插入成功?”
這是因為Mybatis和MySQL / Oracle都有將Date
與String
自動轉換的功能。
示例說明:
實體。
User(userId, userName, cancelStatus)
屬性cancelStatus
:註銷狀態,0-正常,1-註銷中。
一般使用這兩種方法將數字轉換成文字:
getter
內轉換;- 渲染時轉換,如:
ajax
。
一般選擇第2種方法,因為如cancelStatus
這類已約定取值的屬性,往往會用於判斷,如:EL表達式中判斷取值來顯示不同內容。
由於第1種方法會修改getter
,則可能報錯;當然,可定義其他名稱的getXx()
返迴文字信息,但那樣成本高。
因此,大多數情況下都是在渲染時將數字轉換成文字。這也是很多項目前端採用的方法。
本文完結。