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