【版權(quán)聲明】未經(jīng)博主同意,謝絕轉(zhuǎn)載?。ㄕ?qǐng)尊重原創(chuàng),博主保留追究權(quán))
https://www.cnblogs.com/cnb-yuchen/p/17977495
出自【進(jìn)步*于辰的博客】
之前使用SSM+JSP做網(wǎng)站開(kāi)發(fā),由于沒(méi)有注意setter、getter的隱式調(diào)用問(wèn)題,出現(xiàn)了多次bug,對(duì)開(kāi)發(fā)進(jìn)度影響挺大。因此,特來(lái)作這篇文章跟大家分享,幫在使用SSM開(kāi)發(fā)的博友們避避坑。
參考筆記三,P31.1。
- 1、setter
- 2、getter
1、setter
隱式調(diào)用時(shí)機(jī):
1、查詢數(shù)據(jù),調(diào)用無(wú)參構(gòu)造方法創(chuàng)建實(shí)例后
2、getter
隱式調(diào)用時(shí)機(jī):
1、EL表達(dá)式
2、使用@ResponseBody時(shí)
3、<if>、<when>等標(biāo)簽
4、ajax得到的響應(yīng)體是實(shí)體,獲取屬性時(shí)
5、sql語(yǔ)句內(nèi)的 #{xx}、${xx}
對(duì)第5點(diǎn)說(shuō)明:
-
#{xx}/${xx}
都隱式調(diào)用了getter,而不是根據(jù)屬性名調(diào)用。 - 當(dāng)
xx
對(duì)應(yīng)的類型是 Date,即獲取的是時(shí)間時(shí),一般為了EL表達(dá)式顯示,會(huì)重寫(xiě)getter,并將返回值類型改為 String;(當(dāng)然這已經(jīng)不是重寫(xiě)) - 如果這樣“重寫(xiě)”了getter,必須判斷是否為
null
。原因不是為了EL表達(dá)式顯示,因?yàn)楫?dāng)為null
時(shí),EL表達(dá)式不會(huì)報(bào)錯(cuò);而是因?yàn)榉祷氐臅r(shí)間字符串必然是通過(guò) SimpleDateFormat 等類由時(shí)間轉(zhuǎn)換而來(lái),轉(zhuǎn)換時(shí),若時(shí)間為null
,拋出異常。
大家看完上述說(shuō)明,一定有一個(gè)疑惑:“你重寫(xiě)了 Date 類型屬性的getter,例如插入時(shí),#{xx}
獲取時(shí)間,得到的不就是 String,而數(shù)據(jù)庫(kù)字段類型是時(shí)間類型,怎么能插入成功?”
這是因?yàn)镸ybatis和MySQL / Oracle都有將Date
與String
自動(dòng)轉(zhuǎn)換的功能。
示例說(shuō)明:
實(shí)體。
User(userId, userName, cancelStatus)
屬性cancelStatus
:注銷狀態(tài),0-正常,1-注銷中。
一般使用這兩種方法將數(shù)字轉(zhuǎn)換成文字:
-
getter
內(nèi)轉(zhuǎn)換; - 渲染時(shí)轉(zhuǎn)換,如:
ajax
。
一般選擇第2種方法,因?yàn)槿?code>cancelStatus這類已約定取值的屬性,往往會(huì)用于判斷,如:EL表達(dá)式中判斷取值來(lái)顯示不同內(nèi)容。
由于第1種方法會(huì)修改getter
,則可能報(bào)錯(cuò);當(dāng)然,可定義其他名稱的getXx()
返回文字信息,但那樣成本高。
因此,大多數(shù)情況下都是在渲染時(shí)將數(shù)字轉(zhuǎn)換成文字。這也是很多項(xiàng)目前端采用的方法。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-811059.html
本文完結(jié)。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-811059.html
到了這里,關(guān)于關(guān)于使用SSM+JSP開(kāi)發(fā)時(shí)setter、getter隱式調(diào)用問(wèn)題的小結(jié)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!