方法组成:
updateByExampleSelective(@Param("record") Xxx record, @Param("example") XxxExample example);
第一个参数 是要修改的部分值组成的对象,其中有些属性为null则表示该项不修改。
第二个参数 是一个对应的查询条件的类, 通过这个类可以实现 order by 和一部分的where 条件。
使用方法如下:
XxxExample example = new XxxExample();
Criteria criteria = example.createCriteria();
// 这个内部类中有对应Xxx的每个属性的条件方法 .
// 假如 Xxx 包含id 属性.
// 那它就有 andId(属性)EqualTo(SQL里的各种标准条件语句, =、!=、<、>、in、like、not之类的)的方法.
criteria.andIdEqualTo(paramId).andAgeIn(Arrays.asList({10,20,30}));
xxxMapper.updateByExampleSelective(xx,example);
代码例子:
public ResponseData testUpdate(){
//是一个对应的查询条件的类
Employee employee = new Employee();
employee.setEmployeeCode("test_code");
employee.setName("test_name");
employee.setCertificateId("1");
employee.setStatus("N");
employee.setEnabledFlag("N");
Example example = new Example(Employee.class);
Example.Criteria criteria = example.createCriteria();
//和某个属性值相等
criteria.andEqualTo("employeeCode", employee.getEmployeeCode());
//比某个属性大
criteria.andGreaterThan("certificateId", employee.getCertificateId());
criteria.andEqualTo("status", employee.getStatus());
criteria.andEqualTo("enabledFlag", employee.getEnabledFlag());
//要修改的部分值组成的对象 属性为空 代表该属性不进行修改
Employee employee2 = new Employee();
employee2.setName("xjq");
employeeMapper.updateByExampleSelective(employee2, example);
return null;
}
updateByExample针对第一个参数,如果没给值的话,则默认属性都赋值为NULL,它没有非空的动态判断。
生成的代码结构是如下这样的:
UPDATE hr_employee SET REQUEST_ID = -1,PROGRAM_ID = -1,OBJECT_VERSION_NUMBER=OBJECT_VERSION_NUMBER+1,LAST_UPDATED_BY = null,LAST_UPDATE_DATE=CURRENT_TIMESTAMP,LAST_UPDATE_LOGIN = null,ATTRIBUTE_CATEGORY = null,ATTRIBUTE1 = null,ATTRIBUTE2 = null,ATTRIBUTE3 = null,ATTRIBUTE4 = null,ATTRIBUTE5 = null,ATTRIBUTE6 = null,ATTRIBUTE7 = null,ATTRIBUTE8 = null,ATTRIBUTE9 = null,ATTRIBUTE10 = null,ATTRIBUTE11 = null,ATTRIBUTE12 = null,ATTRIBUTE13 = null,ATTRIBUTE14 = null,ATTRIBUTE15 = null,EMPLOYEE_CODE = null,NAME = null,BORN_DATE = null,EMAIL = null,MOBIL = null,JOIN_DATE = null,GENDER = null,CERTIFICATE_ID = null,STATUS = null,ENABLED_FLAG = null,CERTIFICATE_TYPE = null,EFFECTIVE_START_DATE = null,EFFECTIVE_END_DATE = null
WHERE ( EMPLOYEE_CODE = 'test_code' and CERTIFICATE_ID > '1' and STATUS = 'N' and ENABLED_FLAG = 'N' );