MyBatis updateByExample和updateByExampleSelective的區別


大家都用過mybatis generator來生產數據庫的xml文件,但是關於updateByExample和updateByExampleSelective的區別我之前一直分不太清楚。

如果分不清楚,就用updateByExampleSelective這個,不要用updateByExample!

為什么,舉個例子:

BlPayReqLog blPayReqLog = new BlPayReqLog();
blPayReqLog.setDivChangeStatus(Constant.DIV_STATUS_I);
BlPayReqLogExample blPayReqLogExample = new BlPayReqLogExample();
blPayReqLogExample.createCriteria().andSysSeqIdEqualTo(sysSeqId).andSysDateEqualTo(sysDate).
  andDivChangeStatusEqualTo(Constant.DIV_STATUS_P); blPayReqLogMapper.updateByExampleSelective(blPayReqLog, blPayReqLogExample);

上面這段代碼,用的updateByExampleSelective,更新的時候只會更新divChangeStatus這個字段,但是如果用updateByExample,其他的字段都會設置為Null!太恐怖了,用了不當,就會導致災難性的后果,所以,只建議用updateByExampleSelective這個,不要用updateByExample!

另外需要注意的是,如果blPayReqLog沒有設置任何值,那么程序會拋出異常:

ORA-00971: missing SET keyword

很明顯,這個異常是說沒有設置屬性的值,所以,必須要加上相應的值,最簡單的方法,比如你建的表都是由insetTime和updateTime,你沒在更新的時候,都可以設置一下這個updateTime為最新的值,從而可以正常處理。當然這也有一個問題,就是可能確實沒有任何字段要更新,但是你updateTime還是被更新了,不過這個影響可以忽略不記。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM