mybatisplus的批量保存更新 executeBatch flushStatements
发布网友
发布时间:2024-08-20 06:48
我来回答
共1个回答
热心网友
时间:2024-08-25 00:55
近期在处理mybatisplus的批量保存操作时,我发现其executeBatch和flushStatements的执行机制。首先,批量保存的起点是saveOrUpdateBatch方法,它默认使用一个固定的批量大小 DEFAULT_BATCH_SIZE = 1000。
这个方法会调用到 saveOrUpdateBatch(Collection entityList, int batchSize),对于每个实体list,它会开启一个事务。在executeBatch中,主要步骤是先通过id查询(Preparing: SELECT id by id),然后根据查询结果判断是保存(save)还是更新(update)。如果查询结果总数为1,说明是update操作,接着会执行update by id,参数通过lambda传递。
在executeBatch内部,会遍历实体列表,每批操作i个记录后,就会进行SQL事务提交,调用MybatisBatchExecutor的doFlushStatements。如果实体数量超过1000,就会分批提交。这种批量操作方式,如果需要搜索,应该根据特定关键字,而不是直接寻找saveOrUpdateBatch方法。
经过测试,我发现处理1000条数据的批量保存大约需要2.5秒,这说明事务处理会占用一定时间。因此,在实际使用时,需要注意这个时间成本,以优化性能。