From 8ffe1110861ff04ad26ae6203f0866b4dd5350b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90li?= <15040126243@163.com> Date: Wed, 25 Aug 2021 18:01:52 +0800 Subject: [PATCH] =?UTF-8?q?update=20=E9=87=8D=E5=86=99=20InsertAll=20?= =?UTF-8?q?=E6=96=B9=E6=B3=95=E5=AE=9E=E7=8E=B0=20=E5=8F=AF=E5=AE=8C?= =?UTF-8?q?=E7=BE=8E=E6=9B=BF=E4=BB=A3=20saveBatch=20=E7=A7=92=E7=BA=A7?= =?UTF-8?q?=E6=8F=92=E5=85=A5=E4=B8=8A=E4=B8=87=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/mybatisplus/core/BaseMapperPlus.java | 3 +- .../mybatisplus/core/ServicePlusImpl.java | 2 +- .../core/mybatisplus/methods/InsertAll.java | 35 ++++++++++++++++--- .../demo/controller/TestBatchController.java | 2 +- 4 files changed, 34 insertions(+), 8 deletions(-) diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/mybatisplus/core/BaseMapperPlus.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/mybatisplus/core/BaseMapperPlus.java index ee779a5b8..ee20abd81 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/core/mybatisplus/core/BaseMapperPlus.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/mybatisplus/core/BaseMapperPlus.java @@ -14,8 +14,7 @@ import java.util.Collection; public interface BaseMapperPlus extends BaseMapper { /** - * 单sql批量插入( 全量填充 无视数据库默认值 ) - * 适用于无脑插入 + * 单sql批量插入( 全量填充 ) */ int insertAll(@Param("list") Collection batchList); diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/mybatisplus/core/ServicePlusImpl.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/mybatisplus/core/ServicePlusImpl.java index e00076e0e..90a1bd4e7 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/core/mybatisplus/core/ServicePlusImpl.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/mybatisplus/core/ServicePlusImpl.java @@ -113,7 +113,7 @@ public class ServicePlusImpl, T, K> extends ServiceI } /** - * 单sql批量插入( 全量填充 无视数据库默认值 ) + * 单sql批量插入( 全量填充 ) * 适用于无脑插入 */ @Override diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/mybatisplus/methods/InsertAll.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/mybatisplus/methods/InsertAll.java index 2aba06e0e..403ea539b 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/core/mybatisplus/methods/InsertAll.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/mybatisplus/methods/InsertAll.java @@ -2,6 +2,7 @@ package com.ruoyi.common.core.mybatisplus.methods; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.core.injector.AbstractMethod; +import com.baomidou.mybatisplus.core.metadata.TableFieldInfo; import com.baomidou.mybatisplus.core.metadata.TableInfo; import com.baomidou.mybatisplus.core.metadata.TableInfoHelper; import com.ruoyi.common.utils.StringUtils; @@ -11,13 +12,17 @@ import org.apache.ibatis.executor.keygen.NoKeyGenerator; import org.apache.ibatis.mapping.MappedStatement; import org.apache.ibatis.mapping.SqlSource; +import java.util.List; + /** - * 单sql批量插入( 全量填充 无视数据库默认值 ) + * 单sql批量插入( 全量填充 ) * * @author Lion Li */ public class InsertAll extends AbstractMethod { + private final static String[] FILL_PROPERTY = {"createTime", "createBy", "updateTime", "updateBy"}; + @Override public MappedStatement injectMappedStatement(Class mapperClass, Class modelClass, TableInfo tableInfo) { final String sql = ""; @@ -63,10 +68,32 @@ public class InsertAll extends AbstractMethod { final StringBuilder valueSql = new StringBuilder(); valueSql.append(""); if (StringUtils.isNotBlank(tableInfo.getKeyColumn())) { - valueSql.append("#{item.").append(tableInfo.getKeyProperty()).append("},"); + valueSql.append("\n#{item.").append(tableInfo.getKeyProperty()).append("},\n"); + } + List fieldList = tableInfo.getFieldList(); + int last = fieldList.size() - 1; + for (int i = 0; i < fieldList.size(); i++) { + String property = fieldList.get(i).getProperty(); + if (!StringUtils.equalsAny(property, FILL_PROPERTY)) { + valueSql.append(""); + valueSql.append("#{item.").append(property).append("}"); + if (i != last) { + valueSql.append(","); + } + valueSql.append(""); + valueSql.append(""); + valueSql.append("DEFAULT"); + if (i != last) { + valueSql.append(","); + } + valueSql.append(""); + } else { + valueSql.append("#{item.").append(property).append("}"); + if (i != last) { + valueSql.append(","); + } + } } - tableInfo.getFieldList().forEach(x -> valueSql.append("#{item.").append(x.getProperty()).append("},")); - valueSql.delete(valueSql.length() - 1, valueSql.length()); valueSql.append(""); return valueSql.toString(); } diff --git a/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/TestBatchController.java b/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/TestBatchController.java index 9a66fddff..f3a7f6d01 100644 --- a/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/TestBatchController.java +++ b/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/TestBatchController.java @@ -32,7 +32,7 @@ public class TestBatchController extends BaseController { private final ITestDemoService iTestDemoService; /** - * 新增批量方法 ( 全量覆盖填充 ) + * 新增批量方法 可完美替代 saveBatch 秒级插入上万数据 (对mysql负荷较大) */ @ApiOperation(value = "新增批量方法") @PostMapping()