diff --git a/mybatis-enhance-actable/src/main/java/com/gitee/sunchenbin/mybatis/actable/annotation/IgnoreUpdate.java b/mybatis-enhance-actable/src/main/java/com/gitee/sunchenbin/mybatis/actable/annotation/IgnoreUpdate.java new file mode 100644 index 0000000000000000000000000000000000000000..a474932223bed24b12dc1bb417a711f77ed55486 --- /dev/null +++ b/mybatis-enhance-actable/src/main/java/com/gitee/sunchenbin/mybatis/actable/annotation/IgnoreUpdate.java @@ -0,0 +1,25 @@ +package com.gitee.sunchenbin.mybatis.actable.annotation; + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + + +/** + * 作者:guoyzh + * 时间:2021/5/6 9:43 + * 功能:忽略字段更新 + */ +// 该注解用于方法声明 +@Target(ElementType.FIELD) +// VM将在运行期也保留注释,因此可以通过反射机制读取注解的信息 +@Retention(RetentionPolicy.RUNTIME) +// 将此注解包含在javadoc中 +@Documented +public @interface IgnoreUpdate { + + // 是否忽略对当前字段的更新操作 + boolean value() default true; +} diff --git a/mybatis-enhance-actable/src/main/java/com/gitee/sunchenbin/mybatis/actable/command/CreateTableParam.java b/mybatis-enhance-actable/src/main/java/com/gitee/sunchenbin/mybatis/actable/command/CreateTableParam.java index e3253681a409ccee15ddb781977feab3f1b2b353..097bacded1de928c675e35a5ab1387c0d2351e55 100644 --- a/mybatis-enhance-actable/src/main/java/com/gitee/sunchenbin/mybatis/actable/command/CreateTableParam.java +++ b/mybatis-enhance-actable/src/main/java/com/gitee/sunchenbin/mybatis/actable/command/CreateTableParam.java @@ -90,6 +90,19 @@ public class CreateTableParam implements Cloneable{ */ private String fieldComment; + /** + * 是否忽略更新 + */ + private Boolean ignoreUpdate; + + public Boolean getIgnoreUpdate() { + return ignoreUpdate; + } + + public void setIgnoreUpdate(Boolean ignoreUpdate) { + this.ignoreUpdate = ignoreUpdate; + } + public String getFieldName() { return fieldName; } diff --git a/mybatis-enhance-actable/src/main/java/com/gitee/sunchenbin/mybatis/actable/manager/system/SysMysqlCreateTableManagerImpl.java b/mybatis-enhance-actable/src/main/java/com/gitee/sunchenbin/mybatis/actable/manager/system/SysMysqlCreateTableManagerImpl.java index 535acbea4e85438b4678861bf3ef3322386c9be0..d10da6ac28820fa40f77b0846c4c95ff62a3ab08 100644 --- a/mybatis-enhance-actable/src/main/java/com/gitee/sunchenbin/mybatis/actable/manager/system/SysMysqlCreateTableManagerImpl.java +++ b/mybatis-enhance-actable/src/main/java/com/gitee/sunchenbin/mybatis/actable/manager/system/SysMysqlCreateTableManagerImpl.java @@ -1,10 +1,15 @@ package com.gitee.sunchenbin.mybatis.actable.manager.system; import com.baomidou.mybatisplus.annotation.TableName; +import com.gitee.sunchenbin.mybatis.actable.annotation.IgnoreUpdate; import com.gitee.sunchenbin.mybatis.actable.annotation.Index; import com.gitee.sunchenbin.mybatis.actable.annotation.Table; import com.gitee.sunchenbin.mybatis.actable.annotation.Unique; -import com.gitee.sunchenbin.mybatis.actable.command.*; +import com.gitee.sunchenbin.mybatis.actable.command.CreateTableParam; +import com.gitee.sunchenbin.mybatis.actable.command.MySqlTypeAndLength; +import com.gitee.sunchenbin.mybatis.actable.command.SysMysqlColumns; +import com.gitee.sunchenbin.mybatis.actable.command.SysMysqlTable; +import com.gitee.sunchenbin.mybatis.actable.command.TableConfig; import com.gitee.sunchenbin.mybatis.actable.constants.Constants; import com.gitee.sunchenbin.mybatis.actable.constants.MySqlCharsetConstant; import com.gitee.sunchenbin.mybatis.actable.constants.MySqlEngineConstant; @@ -14,6 +19,7 @@ import com.gitee.sunchenbin.mybatis.actable.manager.util.ConfigurationUtil; import com.gitee.sunchenbin.mybatis.actable.utils.ClassScaner; import com.gitee.sunchenbin.mybatis.actable.utils.ClassTools; import com.gitee.sunchenbin.mybatis.actable.utils.ColumnUtils; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -22,8 +28,14 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.util.StringUtils; import java.lang.reflect.Field; -import java.util.*; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; import java.util.Map.Entry; +import java.util.Set; /** * 项目启动时自动扫描配置的目录中的model,根据配置的规则自动创建或更新表 该逻辑只适用于mysql,其他数据库尚且需要另外扩展,因为sql的语法不同 @@ -399,7 +411,7 @@ public class SysMysqlCreateTableManagerImpl implements SysMysqlCreateTableManage for (SysMysqlColumns sysColumn : tableColumnList) { // 数据库中有该字段时,验证是否有更新 CreateTableParam createTableParam = fieldMap.get(sysColumn.getColumn_name().toLowerCase()); - if (createTableParam != null) { + if (createTableParam != null && !createTableParam.getIgnoreUpdate()) { // 该复制操作时为了解决multiple primary key defined的同时又不会drop primary key CreateTableParam modifyTableParam = createTableParam.clone(); // 1.验证主键 @@ -613,6 +625,11 @@ public class SysMysqlCreateTableManagerImpl implements SysMysqlCreateTableManage param.setFiledUniqueValue( uniqueValue.length == 0 ? Arrays.asList(ColumnUtils.getColumnName(field,clas)) : Arrays.asList(uniqueValue)); } + // 获取当前字段的@IgnoreUpdate注解 + IgnoreUpdate ignoreUpdate = field.getAnnotation(IgnoreUpdate.class); + if (null != ignoreUpdate){ + param.setIgnoreUpdate(ignoreUpdate.value()); + } fieldList.add(param); } }