Mybatis之批量降级数据 批量update (mybatis)
本文目录导航:
- Mybatis之批量降级数据(批量update)
- mybatis批量update操作的写法,及批量update报错的疑问处置方法
- mybatisplus的批量保留降级 executeBatch flushStatements
Mybatis之批量降级数据(批量update)
在Mybatis中处置批量降级数据时,效率疑问不容漠视。
理论,单条数据降级会触发屡次数据库操作,影响性能。
为提高效率,可以驳回两种战略,上方区分引见。
首先,介绍的打算是在XML映射文件中经常使用foreach标签灵活构建SQL语句,每条数据对应一条UPDATE语句,一切语句经过;衔接。
口头时,经过管理台检查生成的SQL,可以看到由;分隔的语句串。
为了允许这种操作,须要在数据库衔接URL中设置allowMultiQueries为true。
这样,一次性网络IO即可实现一切降级,大大优化了效率,但需留意或者存在的语法失误。
但是,另一种打算只管也是经常使用foreach,但会将一切数据的降级兼并为一条SQL,这或者造成SQL结构复杂,特意是当数据量大或降级字段多时。
SQL中会蕴含少量的CASE WHEN条件,这或者会参与数据库的处置累赘。
因此,从效率和数据库压力思考,这种方法团体不倡导。
总结来说,Mybatis批量降级数据时,应优先选用经常使用foreach灵活构建分隔SQL的打算,以优化口头效率并防止适度复杂化数据库操作。
mybatis批量update操作的写法,及批量update报错的疑问处置方法
mybatis的批量update操作的写法十分间接。
若要口头,确保数据库衔接url后有蕴含&allowMultiQueries=true设置此参数,MySql将允许批量降级操作。
经常出现失误理论源于此性能未正确参与。
口头批量降级时,mybatis会依据传入的SQL语句和参数,将多个update语句打包为单个SQL口头,清楚优化效率。
确保数据库性能正确,防止口头意外。
mybatisplus的批量保留降级 executeBatch flushStatements
近期在处置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秒,这说明事务处置会占用必定期间。
因此,在实践经常使用时,须要留意这个期间老本,以优化性能。