Mybatis中成功批量降级的几种姿态 总有一款适宜你 (mybatisplus)
本文目录导航:
- Mybatis中成功批量降级的几种姿态,总有一款适宜你
- mybatis批量降级foreach里的list是怎样来的,哪儿定义的,求解?
- mybatisplus的批量保留降级 executeBatch flushStatements
Mybatis中成功批量降级的几种姿态,总有一款适宜你
在Mybatis中成功批量降级的操作,重要集中在XML性能文件中。
以下为四种罕用方法,每种方法都具备其特点,实用于不同的场景。
首先,经过经常使用`case when`,咱们可以针对不同的索引值降级特定的字段。
但是,这种方法在解决少量字段时,SQL语句的长度会变得过长,效率较低。
其次,`foreach`语句可以生成多条SQL语句,从而简化批量降级环节。
但须要留意的是,Mybatis映射文件中的SQL语句自动不允许以;开头,因此须要在衔接MySQL的URL中减少&allowMultiQueries=true,以允许多条SQL的口头。
再者,`ON DUPLICATE KEY UPDATE`是MySQL中基于主键或惟一索引的批量降级模式。
当已有婚配的惟一标示或主键时,它会降级已有数据;而当无婚配数据时,新数据会被拔出。
`replace into`是MySQL特有的批量降级模式。
它在发现已有婚配数据时,会先删除后拔出新数据;假设数据不存在,则间接拔出新数据。
值得留意的是,假设以后数据库用户没有删除权限,则不可经常使用`replace into`。
以上四种方法各有长处,开发者应依据实践名目需求及数据库环境选用适宜的批量降级战略。
mybatis批量降级foreach里的list是怎样来的,哪儿定义的,求解?
传入的参数,关于传入的list,mybatis会给它一个自动的称号list
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秒,这说明事务解决会占用必定期间。
因此,在实践经常使用时,须要留意这个期间老本,以提升性能。