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 d1a23371841d437f6317afe7e60b088b64358b8c..e428b3b016651ccf3e78818829373c94a2330469 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 4dd3aec2f41e3ad7ebeb4b9ce47cfc2326675577..8ce80a59ad2d02e93f01a09537f9872f0f348c1c 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 5a638aaaf96921c7af7ceefde3e6cd53dc11344c..0f906e073cc53341f9fb1b3280a67f4e13600548 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 97122e6b20ef10ad589edd849511daf0465bd60c..1f53ac750e63c652cdd6252a7056649a61a61dcf 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 1a5c914616c537491aaa59916cac7e4d5e46d942..732fd54f209fb1d1ce723a60744d17f1ebe26a90 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 91c2ffd9e3551d1cf09317348e878f29b1c20164..f6c2a951903bdd62cc82e58128cf4b9558c2f4c3 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 84460eeb2a90f372d650ad0b0b4e7c5ba64cbfb9..34c6b0b7b7111c58b9960d94ef12349d8b7ce3e0 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 {