baseMapper.updateById null
时间: 2023-11-27 08:14:14 浏览: 88
如果你在使用 Mybatis-Plus 中的 BaseMapper 时出现了 baseMapper.updateById(null) 的问题,可能是因为你传入了空对象导致的。
在使用 updateById 方法时,需要传入一个非空对象,该对象的主键属性不能为空。如果传入了空对象,就会出现空指针异常。
你需要检查一下传入的对象是否为空,如果为空,就需要重新构造一个非空对象。你可以使用 Mybatis-Plus 提供的 Wrappers 工具类构造一个条件对象,然后再使用 selectOne 方法从数据库中查询出对应的实体对象,最后再将需要更新的属性设置到该对象中即可。
相关问题
baseMapper.updateById() id为null时更新数据
在使用 `baseMapper.updateById()` 方法更新数据时,如果传入的 `id` 参数为 `null`,则会抛出 `NullPointerException` 异常。因为在 Mybatis-Plus 内部的实现中,会通过 `id` 参数查询数据库中对应的数据,然后再进行更新操作,如果 `id` 为 `null`,那么就无法查询到对应的数据。
如果需要更新的数据的 `id` 可能为空,可以在调用 `updateById()` 方法之前,先进行一次查询操作,判断是否存在该数据,如果存在,则获取该数据的 `id`,然后再调用 `updateById()` 进行更新操作。如果不存在,则说明需要进行插入操作。
public void prepatEdit(PrePatrol prepatrol) { Map<String,String> map = new HashMap<>(); String str = StringUtils.join(prepatrol.getCheckbox(),","); prepatrol.setValue(str); prepatrol.setCheckbox(null); List<PrePatrol> prePatrols = this.baseMapper.dictList(); for (PrePatrol entity : prePatrols) { map.put(entity.getIds(), entity.getIdsName()); } if ("8".equals(prepatrol.getIds())){ // 1:交班信息填写完成 PreEmployment preEmployment = new PreEmployment(); preEmployment.setId(prepatrol.getPid()); preEmployment.setEndhandover(1); preEmploymentService.edit(preEmployment); } prepatrol.setIdsName(map.get(prepatrol.getIds())) ; this.updateById(prepatrol); }
这段代码看起来已经相当简洁了。不过,我注意到其中一些可以进行优化的地方:
1. 在循环中使用`this.baseMapper.dictList()`获取`prePatrols`列表可能会导致性能问题,特别是在数据量很大的情况下。如果可能的话,可以考虑将该列表缓存起来,或者使用更高效的方式获取数据。
2. 在循环中使用`map.put(entity.getIds(), entity.getIdsName())`将实体对象的`ids`和`idsName`属性放入map中。如果`ids`属性是唯一的,并且你只需要使用`idsName`属性,可以考虑将map的键值对反转,以便更快地根据`idsName`查找对应的`ids`值。
3. 在条件判断中使用硬编码的字符串"8"进行比较,不利于代码的可读性和维护性。可以将该值定义为一个具有描述性名称的常量,并使用常量进行比较。
下面是优化后的代码示例:
```java
public void prepatEdit(PrePatrol prepatrol) {
Map<String,String> map = new HashMap<>();
String str = StringUtils.join(prepatrol.getCheckbox(),",");
prepatrol.setValue(str);
prepatrol.setCheckbox(null);
List<PrePatrol> prePatrols = getCachedPrePatrols(); // 从缓存中获取数据
for (PrePatrol entity : prePatrols) {
map.put(entity.getIdsName(), entity.getIds());
}
final String TARGET_IDS = "8"; // 定义常量
if (TARGET_IDS.equals(prepatrol.getIds())){
// 1:交班信息填写完成
PreEmployment preEmployment = new PreEmployment();
preEmployment.setId(prepatrol.getPid());
preEmployment.setEndhandover(1);
preEmploymentService.edit(preEmployment);
}
prepatrol.setIdsName(map.get(prepatrol.getIds())) ;
this.updateById(prepatrol);
}
private List<PrePatrol> getCachedPrePatrols() {
// 从缓存中获取数据,如果缓存不存在则从数据库中获取并放入缓存中
// 可以使用工具类或框架来实现缓存逻辑,例如Spring的Cache或Ehcache等
}
```
请注意,上述代码示例仅供参考,并未在实际环境中测试。确保在进行任何更改之前进行适当的测试,并根据实际需求进行调整。
阅读全文