From cc44927d08d94ef3f1a1262be8436c9bbcf7b0aa Mon Sep 17 00:00:00 2001 From: colin Date: Fri, 7 Jun 2024 15:19:32 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BF=90=E8=A1=8C=E6=A8=A1=E5=BC=8F=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0add=E6=A8=A1=E5=BC=8F=EF=BC=8C=E7=B3=BB=E7=BB=9F?= =?UTF-8?q?=E5=90=AF=E5=8A=A8=E5=90=8E=EF=BC=8C=E5=8F=AA=E5=81=9A=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=EF=BC=8C=E6=AF=94=E5=A6=82=E6=96=B0=E5=A2=9E=E8=A1=A8?= =?UTF-8?q?/=E6=96=B0=E5=A2=9E=E5=AD=97=E6=AE=B5/=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E7=B4=A2=E5=BC=95/=E6=96=B0=E5=A2=9E=E5=94=AF=E4=B8=80?= =?UTF-8?q?=E7=BA=A6=E6=9D=9F=E7=9A=84=E5=8A=9F=E8=83=BD=EF=BC=8C=E8=80=8C?= =?UTF-8?q?=E4=B8=8D=E4=BC=9A=E5=8E=BB=E5=81=9A=E4=BF=AE=E6=94=B9=E5=92=8C?= =?UTF-8?q?=E5=88=A0=E9=99=A4=E7=9A=84=E6=93=8D=E4=BD=9C=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mpe/autotable/constants/RunMode.java | 7 ++++++- .../autotable/strategy/CompareTableInfo.java | 6 ++++++ .../mpe/autotable/strategy/IStrategy.java | 5 +++++ .../strategy/mysql/MysqlStrategy.java | 18 ++++++----------- .../mysql/data/MysqlCompareTableInfo.java | 17 ++++++++++++++++ .../mysql/data/MysqlIndexMetadata.java | 12 +++++------ .../pgsql/data/PgsqlCompareTableInfo.java | 20 ++++++++++++++----- .../sqlite/data/SqliteCompareTableInfo.java | 8 ++++++++ 8 files changed, 69 insertions(+), 24 deletions(-) diff --git a/mybatis-plus-ext-autotable/mybatis-plus-ext-autotable-core/src/main/java/com/tangzc/mpe/autotable/constants/RunMode.java b/mybatis-plus-ext-autotable/mybatis-plus-ext-autotable-core/src/main/java/com/tangzc/mpe/autotable/constants/RunMode.java index d1a23371..e428b3b0 100644 --- a/mybatis-plus-ext-autotable/mybatis-plus-ext-autotable-core/src/main/java/com/tangzc/mpe/autotable/constants/RunMode.java +++ b/mybatis-plus-ext-autotable/mybatis-plus-ext-autotable-core/src/main/java/com/tangzc/mpe/autotable/constants/RunMode.java @@ -5,6 +5,7 @@ import lombok.Getter; /** * 运行模式 + * * @author don */ @Getter @@ -26,5 +27,9 @@ public enum RunMode { * 系统启动时,会自动判断哪些表是新建的,哪些字段要新增修改,哪些索引/约束要新增删除等,该操作不会删除字段(更改字段名称的情况下,会认为是新增字段) * 如果需要从数据库强制删除实体上不存在的字段,请参考配置 {@link AutoTableProperties} 中的配置项 autoDropColumn 设置为 true */ - update + update, + /** + * 系统启动后,只做新增,比如新增表/新增字段/新增索引/新增唯一约束的功能,而不会去做修改和删除的操作。 + */ + add } diff --git a/mybatis-plus-ext-autotable/mybatis-plus-ext-autotable-core/src/main/java/com/tangzc/mpe/autotable/strategy/CompareTableInfo.java b/mybatis-plus-ext-autotable/mybatis-plus-ext-autotable-core/src/main/java/com/tangzc/mpe/autotable/strategy/CompareTableInfo.java index 4dd3aec2..8ce80a59 100644 --- a/mybatis-plus-ext-autotable/mybatis-plus-ext-autotable-core/src/main/java/com/tangzc/mpe/autotable/strategy/CompareTableInfo.java +++ b/mybatis-plus-ext-autotable/mybatis-plus-ext-autotable-core/src/main/java/com/tangzc/mpe/autotable/strategy/CompareTableInfo.java @@ -11,4 +11,10 @@ public interface CompareTableInfo { * 是否需要修改表,即表与模型是否存在差异 */ boolean needModify(); + + /** + * 剔除需修改的字段和需修改的索引,只留新增数据 + * 不会保留修改表信息,比如执行引擎,字符集等。。。修改表使其生效 + */ + void holdAddData(); } diff --git a/mybatis-plus-ext-autotable/mybatis-plus-ext-autotable-core/src/main/java/com/tangzc/mpe/autotable/strategy/IStrategy.java b/mybatis-plus-ext-autotable/mybatis-plus-ext-autotable-core/src/main/java/com/tangzc/mpe/autotable/strategy/IStrategy.java index 5a638aaa..0f906e07 100644 --- a/mybatis-plus-ext-autotable/mybatis-plus-ext-autotable-core/src/main/java/com/tangzc/mpe/autotable/strategy/IStrategy.java +++ b/mybatis-plus-ext-autotable/mybatis-plus-ext-autotable-core/src/main/java/com/tangzc/mpe/autotable/strategy/IStrategy.java @@ -67,6 +67,11 @@ public interface IStrategy theIndexColumns = tableIndexs.remove(indexName); if (theIndexColumns == null) { - // 表上不存在该索引,新增 + // 表上不存在该索引 + mysqlIndexMetadata.setExistIndex(true); mysqlCompareTableInfo.getMysqlIndexMetadataList().add(mysqlIndexMetadata); } else { + // 表上存在该索引 + mysqlIndexMetadata.setExistIndex(false); // 先把表上的该索引的所有字段,按照顺序排列 theIndexColumns = theIndexColumns.stream() .sorted(Comparator.comparing(InformationSchemaStatistics::getSeqInIndex)) diff --git a/mybatis-plus-ext-autotable/mybatis-plus-ext-autotable-core/src/main/java/com/tangzc/mpe/autotable/strategy/mysql/data/MysqlCompareTableInfo.java b/mybatis-plus-ext-autotable/mybatis-plus-ext-autotable-core/src/main/java/com/tangzc/mpe/autotable/strategy/mysql/data/MysqlCompareTableInfo.java index 97122e6b..1f53ac75 100644 --- a/mybatis-plus-ext-autotable/mybatis-plus-ext-autotable-core/src/main/java/com/tangzc/mpe/autotable/strategy/mysql/data/MysqlCompareTableInfo.java +++ b/mybatis-plus-ext-autotable/mybatis-plus-ext-autotable-core/src/main/java/com/tangzc/mpe/autotable/strategy/mysql/data/MysqlCompareTableInfo.java @@ -79,6 +79,23 @@ public class MysqlCompareTableInfo implements CompareTableInfo { !mysqlIndexMetadataList.isEmpty(); } + @Override + public void holdAddData() { + //清空修改表的信息 + engine = null; + characterSet = null; + collate = null; + comment = null; + dropPrimary = false; + newPrimaries.clear(); + dropColumnList.clear(); + dropIndexList.clear(); + + //剔除需修改的字段和需修改的索引,只留新增数据 + modifyMysqlColumnMetadataList.removeIf(m -> m.type != ModifyType.ADD); + mysqlIndexMetadataList.removeIf(MysqlIndexMetadata::isExistIndex); + } + public void addNewColumnMetadata(MysqlColumnMetadata mysqlColumnMetadata) { this.modifyMysqlColumnMetadataList.add(new MysqlModifyColumnMetadata(ModifyType.ADD, mysqlColumnMetadata)); } diff --git a/mybatis-plus-ext-autotable/mybatis-plus-ext-autotable-core/src/main/java/com/tangzc/mpe/autotable/strategy/mysql/data/MysqlIndexMetadata.java b/mybatis-plus-ext-autotable/mybatis-plus-ext-autotable-core/src/main/java/com/tangzc/mpe/autotable/strategy/mysql/data/MysqlIndexMetadata.java index 1a5c9146..732fd54f 100644 --- a/mybatis-plus-ext-autotable/mybatis-plus-ext-autotable-core/src/main/java/com/tangzc/mpe/autotable/strategy/mysql/data/MysqlIndexMetadata.java +++ b/mybatis-plus-ext-autotable/mybatis-plus-ext-autotable-core/src/main/java/com/tangzc/mpe/autotable/strategy/mysql/data/MysqlIndexMetadata.java @@ -13,12 +13,7 @@ import org.springframework.core.annotation.AnnotatedElementUtils; import org.springframework.util.StringUtils; import java.lang.reflect.Field; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashSet; -import java.util.List; -import java.util.Objects; -import java.util.Set; +import java.util.*; import java.util.stream.Collectors; /** @@ -43,6 +38,11 @@ public class MysqlIndexMetadata { */ private IndexTypeEnum type; + /** + * 是否是已存在索引 + */ + private boolean existIndex; + /** * 索引注释 */ diff --git a/mybatis-plus-ext-autotable/mybatis-plus-ext-autotable-core/src/main/java/com/tangzc/mpe/autotable/strategy/pgsql/data/PgsqlCompareTableInfo.java b/mybatis-plus-ext-autotable/mybatis-plus-ext-autotable-core/src/main/java/com/tangzc/mpe/autotable/strategy/pgsql/data/PgsqlCompareTableInfo.java index 91c2ffd9..f6c2a951 100644 --- a/mybatis-plus-ext-autotable/mybatis-plus-ext-autotable-core/src/main/java/com/tangzc/mpe/autotable/strategy/pgsql/data/PgsqlCompareTableInfo.java +++ b/mybatis-plus-ext-autotable/mybatis-plus-ext-autotable-core/src/main/java/com/tangzc/mpe/autotable/strategy/pgsql/data/PgsqlCompareTableInfo.java @@ -6,11 +6,7 @@ import lombok.NonNull; import lombok.RequiredArgsConstructor; import org.springframework.util.StringUtils; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; +import java.util.*; /** * @author don @@ -88,6 +84,20 @@ public class PgsqlCompareTableInfo implements CompareTableInfo { !indexMetadataList.isEmpty(); } + @Override + public void holdAddData() { + //清空修改表的信息 + comment = null; + dropPrimaryKeyName = null; + newPrimaries.clear(); + columnComment.clear(); + indexComment.clear(); + dropColumnList.clear(); + modifyColumnMetadataList.clear(); + dropIndexList.clear(); + + } + public void addColumnComment(String columnName, String newComment) { this.columnComment.put(columnName, newComment); } diff --git a/mybatis-plus-ext-autotable/mybatis-plus-ext-autotable-core/src/main/java/com/tangzc/mpe/autotable/strategy/sqlite/data/SqliteCompareTableInfo.java b/mybatis-plus-ext-autotable/mybatis-plus-ext-autotable-core/src/main/java/com/tangzc/mpe/autotable/strategy/sqlite/data/SqliteCompareTableInfo.java index 84460eeb..34c6b0b7 100644 --- a/mybatis-plus-ext-autotable/mybatis-plus-ext-autotable-core/src/main/java/com/tangzc/mpe/autotable/strategy/sqlite/data/SqliteCompareTableInfo.java +++ b/mybatis-plus-ext-autotable/mybatis-plus-ext-autotable-core/src/main/java/com/tangzc/mpe/autotable/strategy/sqlite/data/SqliteCompareTableInfo.java @@ -44,6 +44,14 @@ public class SqliteCompareTableInfo implements CompareTableInfo { !deleteIndexList.isEmpty(); } + + @Override + public void holdAddData() { + rebuildTableSql = null; + deleteIndexList.clear(); + } + + @Data @AllArgsConstructor public static class RebuildIndex { -- Gitee