• 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还是被更新了,不过这个影响可以忽略不记。

  • 相关阅读:
    bzoj 1040: [ZJOI2008]骑士
    CF Playrix Codescapes Cup Problems Analysis
    C++ 指针[转+原创]
    高斯消元
    NOIP模拟
    线段树合并
    After ZJOI2017 day2
    ZJOI 2017 day2 4.27
    ZJOI 2017 二试 day1 4.26
    ZJOI 2017 二试 day0
  • 原文地址:https://www.cnblogs.com/fxl-njfu/p/10528115.html
Copyright © 2020-2023  润新知