当前使用版本(必填,否则不予处理)

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