From 17c71fef20395daeda43ade59bc76732167450c2 Mon Sep 17 00:00:00 2001 From: GuoYZh Date: Thu, 6 May 2021 10:03:57 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0@IgnoreUpdate=E6=B3=A8?= =?UTF-8?q?=E8=A7=A3=20=E6=A0=87=E6=B3=A8=E5=BD=93=E5=89=8D=E5=AD=97?= =?UTF-8?q?=E6=AE=B5=E5=8F=82=E4=B8=8E=E5=88=9B=E5=BB=BA=E4=B8=8D=E5=8F=82?= =?UTF-8?q?=E4=B8=8E=E6=9B=B4=E6=96=B0=20=E5=A4=84=E7=90=86=E9=97=AE?= =?UTF-8?q?=E9=A2=98=EF=BC=9A@DefaultValue("NULL=20ON=20UPDATE=20CURRENT?= =?UTF-8?q?=5FTIMESTAMP")=20=E6=AD=A4=E6=97=B6=E5=BD=93=E5=89=8D=E5=AD=97?= =?UTF-8?q?=E6=AE=B5=E6=AF=8F=E6=AC=A1=E9=87=8D=E5=90=AF=E9=A1=B9=E7=9B=AE?= =?UTF-8?q?=E9=83=BD=E4=BC=9A=E8=BF=9B=E8=A1=8C=E6=9B=B4=E6=96=B0=E6=93=8D?= =?UTF-8?q?=E4=BD=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../actable/annotation/IgnoreUpdate.java | 25 +++++++++++++++++++ .../actable/command/CreateTableParam.java | 13 ++++++++++ .../SysMysqlCreateTableManagerImpl.java | 23 ++++++++++++++--- 3 files changed, 58 insertions(+), 3 deletions(-) create mode 100644 mybatis-enhance-actable/src/main/java/com/gitee/sunchenbin/mybatis/actable/annotation/IgnoreUpdate.java 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 0000000..a474932 --- /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 e325368..097bacd 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 535acbe..d10da6a 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); } } -- Gitee