在 MyBatis-Plus 的 update 方法中,第一个参数代表要更新的实体对象,这个参数的区别主要体现在以下几个方面:
1.指定实体对象 vs. 不指定实体对象
指定实体对象(非 null):
UpdateWrapper<ArchiveInfoDAO> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("RFID", cabinetCellInfoDAO.getRfid());
//当柜子返回的rfid为空时,更新档案状态为借出,否则更新档案状态为在柜
updateWrapper.set("ARCHIVE_STATUS", cabinetCellInfoDAO.getRfid() == null ? 5 : 2);
如果你传入一个实体对象,则此对象中的字段会被视为要更新到数据库的字段。例如,如果实体对象的某个字段被修改了,调用 update 方法时就会将这个字段的值更新到数据库中的对应列。
这种方式通常用于根据某些条件更新特定记录,同时更新某些特定字段。一般情况下,如果想通过主键ID或者唯一索引等条件,而不使用自定义条件进行数据更新时,可以使用这种方式。
ArchiveInfoDAO archiveInfo = new ArchiveInfoDAO();
// 要更新的记录的ID
archiveInfo.setId(1);
// 更新状态
archiveInfo.setArchiveStatus(0);
// 实体对象作为第一个参数
archiveInfoMapper.update(archiveInfo, updateWrapper);
2.不指定实体对象(传 null):
如果第一个参数为 null,那么更新操作仅依赖于传入的 updateWrapper 中定义的条件和需要更新的字段。这种方式适用于只想根据条件更新,而不需要提供整个实体对象的情况。
对于一些需要批量更新或者根据复杂条件更新的场景,使用 null 可以简化操作。这个时候就会默认使用updateWrapper中自定义的条件进行更新。
// 不提供实体对象,仅依赖 updateWrapper
archiveInfoMapper.update(null, updateWrapper);