1. 程式人生 > 其它 >mybatis一些需要注意的點,看看你有木有遇到過

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,隨便寫點,希望能幫到一些條友。

  先到這裡吧~