From c98ab8fb511849912717923d56f3192472dbbd05 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: Fri, 18 Jun 2021 15:27:47 +0800
Subject: [PATCH] =?UTF-8?q?add=20=E5=A2=9E=E5=8A=A0=20=E8=87=AA=E5=AE=9A?=
=?UTF-8?q?=E4=B9=89=20=E6=89=B9=E9=87=8Finsert=E6=96=B9=E6=B3=95?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../core/mybatisplus/methods/InsertAll.java | 47 +++++++++++++++++++
.../framework/config/MybatisPlusConfig.java | 21 +++++++--
2 files changed, 64 insertions(+), 4 deletions(-)
create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/core/mybatisplus/methods/InsertAll.java
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
new file mode 100644
index 00000000..84e7ef47
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/mybatisplus/methods/InsertAll.java
@@ -0,0 +1,47 @@
+package com.ruoyi.common.core.mybatisplus.methods;
+
+import org.apache.ibatis.executor.keygen.NoKeyGenerator;
+import org.apache.ibatis.mapping.MappedStatement;
+import org.apache.ibatis.mapping.SqlSource;
+
+import com.baomidou.mybatisplus.core.injector.AbstractMethod;
+import com.baomidou.mybatisplus.core.metadata.TableInfo;
+
+/**
+ * 单sql批量插入
+ *
+ * @author Lion Li
+ */
+public class InsertAll extends AbstractMethod {
+
+ @Override
+ public MappedStatement injectMappedStatement(Class> mapperClass, Class> modelClass, TableInfo tableInfo) {
+ final String sql = "";
+ final String fieldSql = prepareFieldSql(tableInfo);
+ final String valueSql = prepareValuesSqlForMysqlBatch(tableInfo);
+ final String sqlResult = String.format(sql, tableInfo.getTableName(), fieldSql, valueSql);
+ SqlSource sqlSource = languageDriver.createSqlSource(configuration, sqlResult, modelClass);
+ return this.addInsertMappedStatement(mapperClass, modelClass, "insertAll", sqlSource, new NoKeyGenerator(), null, null);
+ }
+
+ private String prepareFieldSql(TableInfo tableInfo) {
+ StringBuilder fieldSql = new StringBuilder();
+ fieldSql.append(tableInfo.getKeyColumn()).append(",");
+ tableInfo.getFieldList().forEach(x -> fieldSql.append(x.getColumn()).append(","));
+ fieldSql.delete(fieldSql.length() - 1, fieldSql.length());
+ fieldSql.insert(0, "(");
+ fieldSql.append(")");
+ return fieldSql.toString();
+ }
+
+ private String prepareValuesSqlForMysqlBatch(TableInfo tableInfo) {
+ final StringBuilder valueSql = new StringBuilder();
+ valueSql.append("");
+ valueSql.append("#{item.").append(tableInfo.getKeyProperty()).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-framework/src/main/java/com/ruoyi/framework/config/MybatisPlusConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/MybatisPlusConfig.java
index bce2150b..1246a295 100644
--- a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/MybatisPlusConfig.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/MybatisPlusConfig.java
@@ -2,15 +2,21 @@ package com.ruoyi.framework.config;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
+import com.baomidou.mybatisplus.core.injector.AbstractMethod;
+import com.baomidou.mybatisplus.core.injector.DefaultSqlInjector;
+import com.baomidou.mybatisplus.core.injector.ISqlInjector;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
+import com.ruoyi.common.core.mybatisplus.methods.InsertAll;
import com.ruoyi.framework.mybatisplus.CreateAndUpdateMetaObjectHandler;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.annotation.EnableTransactionManagement;
+import java.util.List;
+
/**
* mybatis-plus配置类
*
@@ -94,10 +100,17 @@ public class MybatisPlusConfig {
* sql注入器配置
* https://baomidou.com/guide/sql-injector.html
*/
-// @Bean
-// public ISqlInjector sqlInjector() {
-// return new DefaultSqlInjector();
-// }
+ @Bean
+ public ISqlInjector sqlInjector() {
+ return new DefaultSqlInjector() {
+ @Override
+ public List getMethodList(Class> mapperClass) {
+ List methodList = super.getMethodList(mapperClass);
+ methodList.add(new InsertAll());
+ return methodList;
+ }
+ };
+ }
/**
* TenantLineInnerInterceptor 多租户插件