大家都用過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還是被更新了,不過這個影響可以忽略不記。