mybatis一些需要注意的點,看看你有木有遇到過
在開始文章之前,想隨便說兩句
近期工作比較忙,一直沒時間去更新文章
原因:
1.懶
2.懶
3.懶
其實吧還有一部分原因是因為寫這些文章,可能比較淺顯。覺得沒啥必要
但是應該還是能幫助一部分新手的
由於長期沒更新文章,頭條悄悄警告我說,再不發文你的黃V就會被取消。
好吧,想想如果取消了,下次再申請又得過各種優質
於是乎,今天就寫點吧
寫啥好呢,就隨便說說我們常用的mybatis吧
主要是工作和學習中,遇到的意想不到的注意事項
希望能對你們有幫助
知道的大佬們可以忽略
mybatis是一個到目前為止還是比較常用的orm框架,雖然有缺點但是也有優點
我想大多數公司沒選用hibernate、jpa可能由於業務上需要個性化定製sql,直接在mybatis xml裡自由發揮比較爽,儘管它比較冗長
那麼在使用mybatis時,筆者簡單的分享下幾個坑或者注意事項如下:
xml裡 if 針對於Integer、Short、Long等數字包裝類判空的問題
and id=#{id}
如上程式碼,如果id是String型別是沒啥問題,但是碰到數字包裝類時可能會和預想的情況截然相反。比如id=0,你想無論如何這個條件一定是true吧。因為0怎麼可能等於null 或者等於空字串呢?!
事實上id=0時,這個條件就是false。
看原始碼說明就知道為何了
原始碼:
If the object is a Number,
its double-precision floating-point value is compared with zero;
non-zero is treated as true, zero as false;
If the object is a Character, its boolean value is true if and only
if its char value is non-zero;
Otherwise, its boolean value is true if and only if it is non-null.
什麼意思呢?
為了方便國人都能看懂,我就谷歌翻譯一把,貼出來
如果物件是數字,
將其雙精度浮點值與零進行比較;
非零被視為true,零被視為false;
如果物件是字元,則當且僅當其布林值是true時
如果其char值不為零;
否則,當且僅當其為非null時,其布林值才為true。
ok,看完應該就明白了吧。
resultType和resultMap使用不當造成的問題
這個想必都遇到過,提一嘴是想說使用的時候注意下這個地方。至於兩者區別,可以自己去百度,自己查的理解的比小編幹說來的更實在
xml 中sql引數接收不到值
可能因為dao層缺少了@param("引數名") 註解,這個引數名要和xml中的#{引數名} 一致
插入語句返回自增id主鍵的問題
這個需要在 xml 用 foreach 設定 useGeneratedKeys=”true”和keyProperty=”id”即可
ok,隨便寫點,希望能幫到一些條友。
先到這裡吧~