当前使用版本(必填,否则不予处理)
mybatis-plus-boot-starter 3.3.2
该问题是如何引起的?(确定最新版也有问题再提!!!)
批量新增、批量更新、批量删除,不管要操作的数据是否存在,都会返回true。 在单条更新时没有这个问题,ID不存在就返回的是false
重现步骤(如果有就写完整)
贴源码
ServiceImpl.java
@Transactional(rollbackFor = Exception.class)
@Override
public boolean updateBatchById(Collection<T> entityList, int batchSize) {
Assert.notEmpty(entityList, "error: entityList must not be empty");
String sqlStatement = sqlStatement(SqlMethod.UPDATE_BY_ID);
try (SqlSession batchSqlSession = sqlSessionBatch()) {
int i = 0;
for (T anEntityList : entityList) {
MapperMethod.ParamMap<T> param = new MapperMethod.ParamMap<>();
param.put(Constants.ENTITY, anEntityList);
batchSqlSession.update(sqlStatement, param);
if (i >= 1 && i % batchSize == 0) {
batchSqlSession.flushStatements();
}
i++;
}
batchSqlSession.flushStatements();
}
return true;
}
报错信息
不论是否更新成功,都会返回true,虽然这个更新操作完成了,但是实际没有更新到数据,因为ID不存在。 在单条更新时没有这个问题,ID不存在就返回的是false
Comment From: daselang
我觉得应该返回具体受影响的行数,跟JDBC标准保持一致。至于拿到返回行数判断成true,false或者其他什么样子,应由开发者自己决定。
Comment From: cena009
确实id不存在也都会返回true
Comment From: miemieYaho
org.apache.ibatis.executor.BatchExecutor#doUpdate 只会返回 Integer.MIN_VALUE + 1002