背景:提供的insertBatch是假批量,重复的IO连接与断开效率极低,提供了insertBatchSomeColumn真批量需要自己手动配置

直接上代码:
public interface MyMapper<T> extends BaseMapper<T> { /** * 默认批次提交数量 */ int
DEFAULT_BATCH_SIZE = 1000; /** * 批量新增数据,自选字段 insert. 自动按每批1000插入数据库 * 此填充不会填充
FieldFill.UPDATE 的字段。 * 注意数据库默认更新的字段也需要手工设置 * * @param entityList 数据 * @return
插入条数 */ @Transactional(rollbackFor = Exception.class) default int
insertBatch(List<T> entityList) { return this.insertBatchSomeColumn(entityList,
DEFAULT_BATCH_SIZE); } /** * 批量新增数据,自选字段 insert * 不会分批插入,需要分批请调用方法insertBatch或者
insertBatchSomeColumn(List<T> entityList, int size) * 此填充不会填充 FieldFill.UPDATE
的字段。 * 注意数据库默认更新的字段也需要手工设置 * * @param entityList 数据 * @return 插入条数 */ int
insertBatchSomeColumn(List<T> entityList); /** * 分批插入。每次插入 * @param entityList
原实体对象 * @param size 分批大小 * @return 总插入记录 */ @Transactional(rollbackFor =
Exception.class) default int insertBatchSomeColumn(List<T> entityList, int
size) { if (CollUtil.isEmpty(entityList)) { return 0; } List<List<T>> split =
CollUtil.split(entityList, size); return
split.stream().mapToInt(this::insertBatchSomeColumn).sum(); } }
有使用工具类,可以引入以下依赖
<dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId>
<version>5.8.3</version> </dependency>
以下的操作也需要,要不可能会有其他bug:
public class MySqlInjector extends DefaultSqlInjector { @Override public
List<AbstractMethod> getMethodList(Class<?> mapperClass) { List<AbstractMethod>
methodList = super.getMethodList(mapperClass); // 例: 不要指定了 update 填充的字段
methodList.add(new InsertBatchSomeColumn(i -> i.getFieldFill() !=
FieldFill.UPDATE)); return methodList; } } @Configuration public class
MybatisPlusConfig { /** * 自定义内置选装件 * @return */ @Bean public MySqlInjector
sqlInjector() { return new MySqlInjector(); } }

技术
下载桌面版
GitHub
百度网盘(提取码:draw)
Gitee
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:ixiaoyang8@qq.com
QQ群:766591547
关注微信