From ff5368d3e2ac99fe931943ad10b7d697a7dd7dc6 Mon Sep 17 00:00:00 2001
From: wuww <252740454@qq.com>
Date: 星期三, 16 四月 2025 14:43:33 +0800
Subject: [PATCH] mybatis扩展

---
 src/main/java/com/se/nsl/ext/StaticData.java            |   14 ++++
 src/main/java/com/se/nsl/ext/CustomizedSqlInjector.java |   19 ++++++
 src/main/java/com/se/nsl/service/RegionService.java     |    2 
 src/main/java/com/se/nsl/ext/InsertBatchMethod.java     |   61 ++++++++++++++++++++
 pom.xml                                                 |    2 
 src/main/java/com/se/nsl/ext/UpdateBatchMethod.java     |   62 ++++++++++++++++++++
 src/main/java/com/se/nsl/service/SimuService.java       |    2 
 7 files changed, 159 insertions(+), 3 deletions(-)

diff --git a/pom.xml b/pom.xml
index 53a1143..1aecb89 100644
--- a/pom.xml
+++ b/pom.xml
@@ -45,7 +45,7 @@
         <dependency>
             <groupId>com.baomidou</groupId>
             <artifactId>mybatis-plus-boot-starter</artifactId>
-            <version>3.5.7</version>
+            <version>3.5.1</version>
         </dependency>
         <!--redis-->
         <dependency>
diff --git a/src/main/java/com/se/nsl/ext/CustomizedSqlInjector.java b/src/main/java/com/se/nsl/ext/CustomizedSqlInjector.java
new file mode 100644
index 0000000..661ae89
--- /dev/null
+++ b/src/main/java/com/se/nsl/ext/CustomizedSqlInjector.java
@@ -0,0 +1,19 @@
+package com.se.nsl.ext;
+
+import com.baomidou.mybatisplus.core.injector.AbstractMethod;
+import com.baomidou.mybatisplus.core.injector.DefaultSqlInjector;
+import com.baomidou.mybatisplus.core.metadata.TableInfo;
+
+import java.util.List;
+
+@SuppressWarnings("ALL")
+public class CustomizedSqlInjector extends DefaultSqlInjector {
+    @Override
+    public List<AbstractMethod> getMethodList(Class<?> mapperClass, TableInfo tableInfo) {
+        List<AbstractMethod> methodList = super.getMethodList(mapperClass, tableInfo);
+        methodList.add(new InsertBatchMethod());
+        methodList.add(new UpdateBatchMethod());
+
+        return methodList;
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/com/se/nsl/ext/InsertBatchMethod.java b/src/main/java/com/se/nsl/ext/InsertBatchMethod.java
new file mode 100644
index 0000000..58f15e5
--- /dev/null
+++ b/src/main/java/com/se/nsl/ext/InsertBatchMethod.java
@@ -0,0 +1,61 @@
+package com.se.nsl.ext;
+
+import com.baomidou.mybatisplus.core.injector.AbstractMethod;
+import com.baomidou.mybatisplus.core.metadata.TableFieldInfo;
+import com.baomidou.mybatisplus.core.metadata.TableInfo;
+import org.apache.ibatis.executor.keygen.NoKeyGenerator;
+import org.apache.ibatis.mapping.MappedStatement;
+import org.apache.ibatis.mapping.SqlSource;
+
+@SuppressWarnings("ALL")
+public class InsertBatchMethod extends AbstractMethod {
+    @Override
+    public MappedStatement injectMappedStatement(Class<?> mapperClass, Class<?> modelClass, TableInfo tableInfo) {
+        final String sql = "<script>insert into %s %s values %s</script>";
+        final String fieldSql = prepareFieldSql(tableInfo);
+        final String valueSql = prepareValuesSql(tableInfo);
+        final String sqlResult = String.format(sql, tableInfo.getTableName(), fieldSql, valueSql);
+
+        SqlSource sqlSource = languageDriver.createSqlSource(configuration, sqlResult, modelClass);
+
+        return this.addInsertMappedStatement(mapperClass, modelClass, "insertBatch", 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(","))
+        for (TableFieldInfo f : tableInfo.getFieldList()) {
+            if (StaticData.INSERT_EXCLUDE_FIELDS.contains(f.getProperty())) {
+                continue;
+            }
+
+            fieldSql.append(f.getColumn()).append(",");
+        }
+
+        fieldSql.delete(fieldSql.length() - 1, fieldSql.length());
+        fieldSql.insert(0, "(");
+        fieldSql.append(")");
+
+        return fieldSql.toString();
+    }
+
+    private String prepareValuesSql(TableInfo tableInfo) {
+        final StringBuilder valueSql = new StringBuilder();
+        valueSql.append("<foreach collection=\"list\" item=\"item\" index=\"index\" open=\"(\" separator=\"),(\" close=\")\">");
+        // valueSql.append("#{item.").append(tableInfo.getKeyProperty()).append("},")
+        // tableInfo.getFieldList().forEach(x -> valueSql.append("#{item.").append(x.getProperty()).append("},"))
+        for (TableFieldInfo f : tableInfo.getFieldList()) {
+            if (StaticData.INSERT_EXCLUDE_FIELDS.contains(f.getProperty())) {
+                continue;
+            }
+
+            valueSql.append("geom".equals(f.getProperty()) ? "${item." : "#{item.").append(f.getProperty()).append("},");
+        }
+
+        valueSql.delete(valueSql.length() - 1, valueSql.length());
+        valueSql.append("</foreach>");
+
+        return valueSql.toString();
+    }
+}
diff --git a/src/main/java/com/se/nsl/ext/StaticData.java b/src/main/java/com/se/nsl/ext/StaticData.java
new file mode 100644
index 0000000..b13b705
--- /dev/null
+++ b/src/main/java/com/se/nsl/ext/StaticData.java
@@ -0,0 +1,14 @@
+package com.se.nsl.ext;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+@SuppressWarnings("ALL")
+public class StaticData {
+    public static final int I200 = 200;
+
+    public final static List<String> INSERT_EXCLUDE_FIELDS = new ArrayList<>(Arrays.asList("id", "gid", "objectid", "updateUser", "updateTime", "shape_leng", "shape_area", "serialVersionUID", "dirName", "depName", "createUserName", "updateUserName"));
+
+    public final static List<String> UPDATE_EXCLUDE_FIELDS = new ArrayList<>(Arrays.asList("objectid", "createUser", "createTime", "shape_leng", "shape_area", "serialVersionUID", "dirName", "depName", "createUserName", "updateUserName"));
+}
diff --git a/src/main/java/com/se/nsl/ext/UpdateBatchMethod.java b/src/main/java/com/se/nsl/ext/UpdateBatchMethod.java
new file mode 100644
index 0000000..ee2582b
--- /dev/null
+++ b/src/main/java/com/se/nsl/ext/UpdateBatchMethod.java
@@ -0,0 +1,62 @@
+package com.se.nsl.ext;
+
+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.toolkit.sql.SqlScriptUtils;
+import org.apache.ibatis.mapping.MappedStatement;
+import org.apache.ibatis.mapping.SqlSource;
+
+@SuppressWarnings("ALL")
+public class UpdateBatchMethod extends AbstractMethod {
+    @Override
+    public MappedStatement injectMappedStatement(Class<?> mapperClass, Class<?> modelClass, TableInfo tableInfo) {
+        String sql = "<script>\n<foreach collection=\"list\" item=\"item\" separator=\";\">\nupdate %s %s where %s=#{%s} %s\n</foreach>\n</script>";
+        String additional = tableInfo.isWithVersion() ? tableInfo.getVersionFieldInfo().getVersionOli("item", "item.") : "" + tableInfo.getLogicDeleteSql(true, true);
+        //String setSql = sqlSet(tableInfo.isWithLogicDelete(), false, tableInfo, false, "item", "item.");
+        String setSql = getSqlSet(tableInfo.isWithLogicDelete(), false, tableInfo, false, "item", "item.");
+        String sqlResult = String.format(sql, tableInfo.getTableName(), setSql, tableInfo.getKeyColumn(), "item." + tableInfo.getKeyProperty(), additional);
+
+        // update %s %s where %s=#{%s} %s
+        // update tab set a=#{a} where gid=1
+
+        SqlSource sqlSource = languageDriver.createSqlSource(configuration, sqlResult, modelClass);
+
+        return this.addUpdateMappedStatement(mapperClass, modelClass, "updateBatch", sqlSource);
+    }
+
+    private String getSqlSet(boolean logic, boolean ew, TableInfo table, boolean judgeAliasNull, final String alias, final String prefix) {
+        // String sqlScript = table.getAllSqlSet(logic, prefix);
+        String sqlScript = getSqlSet(table);
+        if (judgeAliasNull) {
+            sqlScript = SqlScriptUtils.convertIf(sqlScript, String.format("%s != null", alias), true);
+        }
+        if (ew) {
+            sqlScript = sqlScript + "\n";
+            sqlScript = sqlScript + this.convertIfEwParam("ew.sqlSet", false);
+        }
+
+        sqlScript = SqlScriptUtils.convertSet(sqlScript);
+
+        return sqlScript;
+    }
+
+    private String getSqlSet(TableInfo tableInfo) {
+        StringBuilder sb = new StringBuilder();
+        for (TableFieldInfo f : tableInfo.getFieldList()) {
+            if (StaticData.UPDATE_EXCLUDE_FIELDS.contains(f.getProperty())) {
+                continue;
+            }
+
+            if ("geom".equals(f.getProperty())) {
+                sb.append("<if test=\"item['geom'] != null\">geom=${item.geom},</if>\n");
+                continue;
+            }
+
+            sb.append(String.format("<if test=\"item['%s'] != null\">%s=#{item.%s},</if>\n", f.getProperty(), f.getColumn(), f.getProperty()));
+        }
+        sb.deleteCharAt(sb.length() - 1);
+
+        return sb.toString();
+    }
+}
diff --git a/src/main/java/com/se/nsl/service/RegionService.java b/src/main/java/com/se/nsl/service/RegionService.java
index e7161f0..b5f8c2b 100644
--- a/src/main/java/com/se/nsl/service/RegionService.java
+++ b/src/main/java/com/se/nsl/service/RegionService.java
@@ -62,7 +62,7 @@
      * @return 鍒犻櫎鎴愬姛鐨勮褰曟暟
      */
     public int deleteByIds(List<Integer> ids) {
-        return regionMapper.deleteByIds(ids);
+        return regionMapper.deleteBatchIds(ids);
     }
 
     /**
diff --git a/src/main/java/com/se/nsl/service/SimuService.java b/src/main/java/com/se/nsl/service/SimuService.java
index eb12f7e..7365e6e 100644
--- a/src/main/java/com/se/nsl/service/SimuService.java
+++ b/src/main/java/com/se/nsl/service/SimuService.java
@@ -72,7 +72,7 @@
      * @return 鍒犻櫎鎴愬姛鐨勮褰曟暟
      */
     public int deleteByIds(List<Integer> ids) {
-        return simuMapper.deleteByIds(ids);
+        return simuMapper.deleteBatchIds(ids);
     }
 
     /**

--
Gitblit v1.9.3