From 41e75441164d0ee964feac7e1fd4c418a35516f3 Mon Sep 17 00:00:00 2001 From: fanbeibei Date: Sun, 23 Apr 2023 18:44:10 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E6=89=A9=E5=B1=95=20logicDeleteStrategy=20?= =?UTF-8?q?=E5=B1=9E=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 344 ++++++++- .../gitee/fastmybatis/annotation/Column.java | 18 +- .../fastmybatis/core/FastmybatisConfig.java | 15 + .../ext/code/generator/ColumnDefinition.java | 124 +++- .../ext/code/generator/ColumnSelector.java | 9 + .../code/generator/LogicDeleteDefinition.java | 13 + .../code/generator/LogicDeleteStrategy.java | 35 + .../core/ext/code/util/FieldUtil.java | 664 +++++++++--------- 8 files changed, 847 insertions(+), 375 deletions(-) create mode 100644 fastmybatis-core/src/main/java/com/gitee/fastmybatis/core/ext/code/generator/LogicDeleteStrategy.java diff --git a/.gitignore b/.gitignore index fa13141..2d62230 100644 --- a/.gitignore +++ b/.gitignore @@ -1,31 +1,331 @@ -target/ -logs/ -!.mvn/wrapper/maven-wrapper.jar +#java忽略文件 + +*.class + +# BlueJ files +*.ctxt + +# Mobile Tools for Java (J2ME) +.mtj.tmp/ + +# Package Files # +*.jar +*.war +*.nar +*.ear +*.zip +*.tar.gz +*.rar + +# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml +hs_err_pid* + +#Eclipse忽略文件 +.metadata +bin/ +tmp/ +*.tmp +*.bak +*.swp +*~.nib +local.properties +.settings/ +.loadpath +.recommenders + +.mvn/ + +# Eclipse Core +.project + +# External tool builders +.externalToolBuilders/ -### STS ### -.apt_generated +# Locally stored "Eclipse launch configurations" +*.launch + +# PyDev specific (Python IDE for Eclipse) +*.pydevproject + +# CDT-specific (C/C++ Development Tooling) +.cproject + +# JDT-specific (Eclipse Java Development Tools) .classpath + +# Java annotation processor (APT) .factorypath -.project -.settings + +# PDT-specific (PHP Development Tools) +.buildpath + +# sbteclipse plugin +.target + +# Tern plugin +.tern-project + +# TeXlipse plugin +.texlipse + +# STS (Spring Tool Suite) .springBeans -### IntelliJ IDEA ### -.idea +# Code Recommenders +.recommenders/ + +#windows忽略文件 +# Windows thumbnail cache files +Thumbs.db +ehthumbs.db +ehthumbs_vista.db + +# Folder config file +Desktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Windows Installer files +*.cab +*.msi +*.msm +*.msp + +# Windows shortcuts +*.lnk + +#JetBrains 公司产品 如前端常用webstorm +# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and Webstorm +# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 + +# User-specific stuff: +.idea/workspace.xml +.idea/tasks.xml + +# Sensitive or high-churn files: +.idea/dataSources/ +.idea/dataSources.ids +.idea/dataSources.xml +.idea/dataSources.local.xml +.idea/sqlDataSources.xml +.idea/dynamic.xml +.idea/uiDesigner.xml + +# Gradle: +.idea/gradle.xml +.idea/libraries + +# Mongo Explorer plugin: +.idea/mongoSettings.xml + +## File-based project format: *.iws + +## Plugin-specific files: + +# IntelliJ +/out/ + +# mpeltonen/sbt-idea plugin +.idea_modules/ + +# JIRA plugin +atlassian-ide-plugin.xml + +# Crashlytics plugin (for Android Studio and IntelliJ) +com_crashlytics_export_strings.xml +crashlytics.properties +crashlytics-build.properties +fabric.properties + + +#前端常用sublime编辑器 +# cache files for sublime text +*.tmlanguage.cache +*.tmPreferences.cache +*.stTheme.cache + +# workspace files are user-specific +*.sublime-workspace + +# project files should be checked into the repository, unless a significant +# proportion of contributors will probably not be using SublimeText +# *.sublime-project + +# sftp configuration file +sftp-config.json + +# Package control specific files +Package Control.last-run +Package Control.ca-list +Package Control.ca-bundle +Package Control.system-ca-bundle +Package Control.cache/ +Package Control.ca-certs/ +Package Control.merged-ca-bundle +Package Control.user-ca-bundle +oscrypto-ca-bundle.crt +bh_unicode_properties.cache + +# Sublime-github package stores a github token in this file +# https://packagecontrol.io/packages/sublime-github +GitHub.sublime-settings + +#notepad +# Notepad++ backups # +*.bak + +#python忽略文件 +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +env/ +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +*.egg-info/ +.installed.cfg +*.egg +.vscode/ +node_modules/ + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*,cover +.hypothesis/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +target/ +webapp/ +/webapp/ + +# Jupyter Notebook +.ipynb_checkpoints + +# pyenv +.python-version + +# celery beat schedule file +celerybeat-schedule + +# dotenv +.env + +# virtualenv +.venv/ +venv/ +ENV/ + +# Spyder project settings +.spyderproject + +# Rope project settings +.ropeproject + + +#maven忽略文件 +target/ +pom.xml.tag +pom.xml.releaseBackup +pom.xml.versionsBackup +pom.xml.next +release.properties +dependency-reduced-pom.xml +buildNumber.properties +.mvn/timing.properties + +# Exclude maven wrapper +!/.mvn/wrapper/maven-wrapper.jar + + +#mircosoft office忽略 +*.tmp + +# Word temporary +~$*.doc* + +# Excel temporary +~$*.xls* + +# Excel Backup File +*.xlk + +# PowerPoint temporary +~$*.ppt* + +# Visio autosave temporary files +*.~vsdx + +#防止恶意插件病毒等 +*.exe + + +# 忽略各级目录的idea和eclipse文件 +target/ +.settings/ +*.classpath +*.project +/logs/ +*.yml *.iml +.idea/ *.ipr +*.iws -### NetBeans ### -nbproject/private/ -nbbuild/ -dist/ -nbdist/ -.nb-gradle/ -/.idea/ -/easyopen-parent.iml -/.settings/ -/.project -!/.idea/ -/.idea/libraries/ -/local-config/ + +# Ignore Gradle project-specific cache directory +.gradle + +# Ignore Gradle build output directory +build \ No newline at end of file diff --git a/fastmybatis-annotation/src/main/java/com/gitee/fastmybatis/annotation/Column.java b/fastmybatis-annotation/src/main/java/com/gitee/fastmybatis/annotation/Column.java index 722d2f9..f92ae90 100644 --- a/fastmybatis-annotation/src/main/java/com/gitee/fastmybatis/annotation/Column.java +++ b/fastmybatis-annotation/src/main/java/com/gitee/fastmybatis/annotation/Column.java @@ -31,6 +31,7 @@ import java.lang.annotation.Target; public @interface Column { /** * 表字段名 + * * @return 表字段名 */ String name() default ""; @@ -50,21 +51,24 @@ public @interface Column { * } * } * + * * @return true:是 */ boolean lazyFetch() default false; /** * 是否乐观锁字段 + * * @return true:是 */ boolean version() default false; /** - * 是否逻辑删除字段 + * 是否逻辑删除字段,废弃用{@link #logicDeleteStrategy()} 替代,同时配置logicDelete和logicDeleteStrategy则以logicDeleteStrategy为准 * * @return 该字段是否逻辑删除字段 */ + @Deprecated boolean logicDelete() default false; /** @@ -72,12 +76,20 @@ public @interface Column { * * @return 未删除数据库保存的值 */ - String notDeleteValue() default ""; + String notDeleteValue() default "0"; /** * 删除后数据库保存的值,不指定默认为1 * * @return 删除后数据库保存的值 */ - String deleteValue() default ""; + String deleteValue() default "1"; + + + /** + * 逻辑删除策略,默认none + * + * @return + */ + String logicDeleteStrategy() default ""; } \ No newline at end of file diff --git a/fastmybatis-core/src/main/java/com/gitee/fastmybatis/core/FastmybatisConfig.java b/fastmybatis-core/src/main/java/com/gitee/fastmybatis/core/FastmybatisConfig.java index ee571ec..df3a064 100644 --- a/fastmybatis-core/src/main/java/com/gitee/fastmybatis/core/FastmybatisConfig.java +++ b/fastmybatis-core/src/main/java/com/gitee/fastmybatis/core/FastmybatisConfig.java @@ -1,5 +1,6 @@ package com.gitee.fastmybatis.core; +import com.gitee.fastmybatis.core.ext.code.generator.LogicDeleteStrategy; import com.gitee.fastmybatis.core.handler.BaseFill; import java.io.File; @@ -55,6 +56,12 @@ public class FastmybatisConfig { /** 全局模板classpath */ private String globalVmLocation; + + /** + * 逻辑删除策略,默认LogicDeleteStrategy.FIXED_VALUE + * + */ + private String logicDeleteStrategy = LogicDeleteStrategy.NONE; /** 逻辑删除,指定未删除时的值 */ private String logicNotDeleteValue = "0"; @@ -116,6 +123,14 @@ public class FastmybatisConfig { return camel2underline; } + + public String getLogicDeleteStrategy() { + return logicDeleteStrategy; + } + + public void setLogicDeleteStrategy(String logicDeleteStrategy) { + this.logicDeleteStrategy = logicDeleteStrategy; + } public int getMapperExecutorPoolSize() { return mapperExecutorPoolSize; } diff --git a/fastmybatis-core/src/main/java/com/gitee/fastmybatis/core/ext/code/generator/ColumnDefinition.java b/fastmybatis-core/src/main/java/com/gitee/fastmybatis/core/ext/code/generator/ColumnDefinition.java index f86831d..a495744 100644 --- a/fastmybatis-core/src/main/java/com/gitee/fastmybatis/core/ext/code/generator/ColumnDefinition.java +++ b/fastmybatis-core/src/main/java/com/gitee/fastmybatis/core/ext/code/generator/ColumnDefinition.java @@ -7,7 +7,7 @@ import com.gitee.fastmybatis.core.handler.Identitys; /** * 表字段信息 - * + * * @author tanghc */ public class ColumnDefinition { @@ -16,43 +16,81 @@ public class ColumnDefinition { private static final String MYBATIS_JDBC_TYPE = ", jdbcType=%s"; - /** java字段名 */ + /** + * java字段名 + */ private String javaFieldName; - /** 数据库字段名 */ + /** + * 数据库字段名 + */ private String columnName; - /** javaBean字段类型,String,Integer等 */ + /** + * javaBean字段类型,String,Integer等 + */ private String type; - /** javaBean字段完整类型,java.lang.String */ + /** + * javaBean字段完整类型,java.lang.String + */ private String fullType; - /** 是否自增 */ + /** + * 是否自增 + */ private boolean isIdentity; - /** 是否auto策略 */ + /** + * 是否auto策略 + */ private boolean isAuto; - /** 是否uuid策略 */ + /** + * 是否uuid策略 + */ private boolean isUuid; - /** 是否sequence策略(oracle) */ + /** + * 是否sequence策略(oracle) + */ private boolean isSequence; - /** 序列名称 */ + /** + * 序列名称 + */ private String sequenceName; private boolean isCustomFill; - /** 是否主键 */ + /** + * 是否主键 + */ private boolean isPk; private boolean isEnum; - /** 是否乐观锁字段 */ + /** + * 是否乐观锁字段 + */ private boolean isVersion; - /** 是否逻辑删除 */ + /** + * 是否逻辑删除.废弃用{@link #logicDeleteStrategy} 代替,同时配置logicDelete和logicDeleteStrategy则以logicDeleteStrategy为准 + */ + @Deprecated private boolean isLogicDelete; - /** 是否是忽略更新字段 */ + /** + * 是否是忽略更新字段 + */ private boolean isIgnoreUpdate; - /** 删除值 */ + + + /** + * 逻辑删除策略 + */ + private String logicDeleteStrategy; + + /** + * 删除值 + */ private Object logicDeleteValue; - /** 未删除值 */ + /** + * 未删除值 + */ private Object logicNotDeleteValue; private String comment; private String typeHandler; private FillType fillType; - + private int orderIndex = 1; public boolean getIsCustomFillUpdate() { @@ -61,6 +99,7 @@ public class ColumnDefinition { /** * 是否是插入字段,不为自增且未设置忽略 + * * @return true:是插入字段 */ public boolean getIsInsertColumn() { @@ -69,6 +108,7 @@ public class ColumnDefinition { /** * 是否是更新字段,不为主键且未设置忽略 + * * @return */ public boolean getIsUpdateColumn() { @@ -115,9 +155,9 @@ public class ColumnDefinition { return hasTypeHandler(type) ? (", typeHandler=" + typeHandler) : ""; - // jdbcType=VARCHAR - //: type == FillType.INSERT || type == FillType.UPDATE - //? String.format(MYBATIS_JDBC_TYPE, this.getMybatisJdbcType()) : ""; + // jdbcType=VARCHAR + //: type == FillType.INSERT || type == FillType.UPDATE + //? String.format(MYBATIS_JDBC_TYPE, this.getMybatisJdbcType()) : ""; } public boolean getHasTypeHandlerInsert() { @@ -158,26 +198,27 @@ public class ColumnDefinition { /** * 返回 mybatis值内容 + * * @param fillType 填充类型 - * @param prefix 前缀 + * @param prefix 前缀 * @return 如返回#{userName} */ private String getMybatisValue(FillType fillType, String prefix) { // 如果是乐观锁字段 - if (this.isVersion) { + if (this.isVersion) { return this.columnName + "+1"; } else { StringBuilder mybatisValue = new StringBuilder(); mybatisValue.append("#{" + prefix + this.getJavaFieldName()).append(this.getTypeHandlerValue(fillType)) .append("}"); - return mybatisValue.toString(); + return mybatisValue.toString(); } } /** * 是否是乐观锁字段 - * + * * @return true是 */ public boolean getIsVersion() { @@ -190,7 +231,7 @@ public class ColumnDefinition { /** * 是否是自增主键 - * + * * @return true,是 */ public boolean getIsIdentityPk() { @@ -207,8 +248,8 @@ public class ColumnDefinition { /** * 返回java字段名,并且第一个字母大写 - * - * @return 返回java字段名,并且第一个字母大写 + * + * @return 返回java字段名, 并且第一个字母大写 */ public String getJavaFieldNameUF() { return FieldUtil.upperFirstLetter(getJavaFieldName()); @@ -216,7 +257,7 @@ public class ColumnDefinition { /** * 返回java字段 - * + * * @return 返回java字段 */ public String getJavaFieldName() { @@ -229,8 +270,8 @@ public class ColumnDefinition { /** * 获得装箱类型,Integer,Float - * - * @return 获得装箱类型,Integer,Float + * + * @return 获得装箱类型, Integer, Float */ public String getJavaTypeBox() { return JavaTypeUtil.convertToJavaBoxType(type); @@ -316,10 +357,21 @@ public class ColumnDefinition { this.typeHandler = typeHandler; } + + public String getLogicDeleteStrategy() { + return logicDeleteStrategy; + } + + public void setLogicDeleteStrategy(String logicDeleteStrategy) { + this.logicDeleteStrategy = logicDeleteStrategy; + } + + @Deprecated public void setIsLogicDelete(boolean isLogicDelete) { this.isLogicDelete = isLogicDelete; } + @Deprecated public boolean getIsLogicDelete() { return this.isLogicDelete; } @@ -348,13 +400,13 @@ public class ColumnDefinition { } } - public int getOrderIndex() { - return orderIndex; - } + public int getOrderIndex() { + return orderIndex; + } - public void setOrderIndex(int orderIndex) { - this.orderIndex = orderIndex; - } + public void setOrderIndex(int orderIndex) { + this.orderIndex = orderIndex; + } public boolean getIsAuto() { return isAuto; diff --git a/fastmybatis-core/src/main/java/com/gitee/fastmybatis/core/ext/code/generator/ColumnSelector.java b/fastmybatis-core/src/main/java/com/gitee/fastmybatis/core/ext/code/generator/ColumnSelector.java index 2ade59b..3d70d2d 100644 --- a/fastmybatis-core/src/main/java/com/gitee/fastmybatis/core/ext/code/generator/ColumnSelector.java +++ b/fastmybatis-core/src/main/java/com/gitee/fastmybatis/core/ext/code/generator/ColumnSelector.java @@ -269,17 +269,26 @@ public class ColumnSelector { Object delVal, notDelVal; String deleteValue = logicDeleteDefinition.getDeleteValue(); String notDeleteValue = logicDeleteDefinition.getNotDeleteValue(); + String logicDeleteStrategy = logicDeleteDefinition.getLogicDeleteStrategy(); // 如果没有指定则使用全局配置的值 if ("".equals(deleteValue)) { deleteValue = this.config.getLogicDeleteValue(); } + if ("".equals(notDeleteValue)) { notDeleteValue = this.config.getLogicNotDeleteValue(); } + + if ("".equals(logicDeleteStrategy)) { + logicDeleteStrategy = this.config.getLogicDeleteStrategy(); + } + + delVal = StringUtil.isInteger(deleteValue) ? Integer.valueOf(deleteValue) : deleteValue; columnDefinition.setLogicDeleteValue(delVal); notDelVal = StringUtil.isInteger(notDeleteValue) ? Integer.valueOf(notDeleteValue) : notDeleteValue; columnDefinition.setLogicNotDeleteValue(notDelVal); + columnDefinition.setLogicDeleteStrategy(logicDeleteStrategy); } private BaseFill getFill(String columnName, Field field) { diff --git a/fastmybatis-core/src/main/java/com/gitee/fastmybatis/core/ext/code/generator/LogicDeleteDefinition.java b/fastmybatis-core/src/main/java/com/gitee/fastmybatis/core/ext/code/generator/LogicDeleteDefinition.java index 7534de7..7ff465c 100644 --- a/fastmybatis-core/src/main/java/com/gitee/fastmybatis/core/ext/code/generator/LogicDeleteDefinition.java +++ b/fastmybatis-core/src/main/java/com/gitee/fastmybatis/core/ext/code/generator/LogicDeleteDefinition.java @@ -4,6 +4,11 @@ package com.gitee.fastmybatis.core.ext.code.generator; * @author thc */ public class LogicDeleteDefinition { + /** + * 逻辑删除策略 + */ + private String logicDeleteStrategy; + /** * 未删除数据库保存的值,不指定默认为0 */ @@ -29,4 +34,12 @@ public class LogicDeleteDefinition { public void setDeleteValue(String deleteValue) { this.deleteValue = deleteValue; } + + public String getLogicDeleteStrategy() { + return logicDeleteStrategy; + } + + public void setLogicDeleteStrategy(String logicDeleteStrategy) { + this.logicDeleteStrategy = logicDeleteStrategy; + } } diff --git a/fastmybatis-core/src/main/java/com/gitee/fastmybatis/core/ext/code/generator/LogicDeleteStrategy.java b/fastmybatis-core/src/main/java/com/gitee/fastmybatis/core/ext/code/generator/LogicDeleteStrategy.java new file mode 100644 index 0000000..50b542a --- /dev/null +++ b/fastmybatis-core/src/main/java/com/gitee/fastmybatis/core/ext/code/generator/LogicDeleteStrategy.java @@ -0,0 +1,35 @@ +package com.gitee.fastmybatis.core.ext.code.generator; + +import java.util.concurrent.ConcurrentHashMap; + +/** + *

+ * 逻辑删除策略 + *

+ * + * @author youbeiwuhuan + * @version 1.0.0 + * @date 2023/4/23 14:43 + */ +public class LogicDeleteStrategy { + private LogicDeleteStrategy() { + } + + /** + * 不使用逻辑删除 + */ + public static final String NONE = "none"; + + /** + * 固定值策略,notDeleteValue和deleteValue生效 + */ + public static final String FIXED_VALUE = "fixed_value"; + + + /** + * 删除时主键填充逻辑删除字段策略 + */ + public static final String ID_FILL = "id_fill"; + + +} diff --git a/fastmybatis-core/src/main/java/com/gitee/fastmybatis/core/ext/code/util/FieldUtil.java b/fastmybatis-core/src/main/java/com/gitee/fastmybatis/core/ext/code/util/FieldUtil.java index 45dea9b..a11a157 100644 --- a/fastmybatis-core/src/main/java/com/gitee/fastmybatis/core/ext/code/util/FieldUtil.java +++ b/fastmybatis-core/src/main/java/com/gitee/fastmybatis/core/ext/code/util/FieldUtil.java @@ -8,11 +8,13 @@ import com.gitee.fastmybatis.core.FastmybatisConfig; import com.gitee.fastmybatis.core.annotation.LazyFetch; import com.gitee.fastmybatis.core.annotation.LogicDelete; import com.gitee.fastmybatis.core.ext.code.generator.LogicDeleteDefinition; +import com.gitee.fastmybatis.core.ext.code.generator.LogicDeleteStrategy; import com.gitee.fastmybatis.core.util.ClassUtil; import com.gitee.fastmybatis.core.util.StringUtil; import java.lang.reflect.Field; import java.lang.reflect.Modifier; +import java.util.Objects; import java.util.Optional; /** @@ -20,318 +22,352 @@ import java.util.Optional; */ public class FieldUtil { private FieldUtil() { - } - - private static final String UUID_NAME = "uuid"; - private static final String INCREMENT_NAME = "increment"; - private static final String SEQUENCE_NAME = "seq"; - private static final String STRING_TYPE = "String"; - private static final String DOT = "."; - - /** - * 过滤"." - * - * @param field 字段名 - * @return 过滤‘.’符号 - */ - public static String dotFilter(String field) { - if (isNotEmpty(field) && field.contains(DOT)) { - String[] words = field.split("\\."); - StringBuilder ret = new StringBuilder(); - for (String str : words) { - ret.append(upperFirstLetter(str)); - } - return ret.toString(); - } - return field; - } - - /** - * 将第一个字母转换成大写 - * - * @param str 内容 - * @return 返回原字符串且第一个字符大写 - */ - public static String upperFirstLetter(String str) { - if (isNotEmpty(str)) { - String firstUpper = String.valueOf(str.charAt(0)).toUpperCase(); - str = firstUpper + str.substring(1); - } - return str; - } - - /** - * 将第一个字母转换成小写 - * - * @param str 内容 - * @return 返回原字符串且第一个字母小写 - */ - public static String lowerFirstLetter(String str) { - if (isNotEmpty(str)) { - String firstLower = String.valueOf(str.charAt(0)).toLowerCase(); - str = firstLower + str.substring(1); - } - return str; - } - - public static final char UNDERLINE = '_'; - - /** - * 驼峰转下划线 - * @param param 内容 - * @return 返回转换后的字符串 - */ - public static String camelToUnderline(String param) { - if (param == null || "".equals(param.trim())) { - return ""; - } - int len = param.length(); - StringBuilder sb = new StringBuilder(len); - for (int i = 0; i < len; i++) { - char c = param.charAt(i); - int preIndex = i - 1; - int nextIndex = i + 1; - // 是否需要变为小写字母 - boolean needToLower = ( - Character.isUpperCase(c) - && preIndex > 0 - && Character.isLowerCase(param.charAt(preIndex)) - ) - || - ( - Character.isUpperCase(c) - && nextIndex < len - && Character.isLowerCase(param.charAt(nextIndex)) - ); - - if (needToLower) { - if(i > 0) { - sb.append(UNDERLINE); - } - sb.append(Character.toLowerCase(c)); - } else { - sb.append(c); - } - } - return sb.toString(); - } - - public static String formatField(String field) { - // t.`username` - String[] arr = field.split("\\."); - if (arr.length == 2) { - field = arr[1]; - } - // 去除首尾`(mysql) - field = StringUtil.trimLeadingCharacter(field, '`'); - field = StringUtil.trimTrailingCharacter(field, '`'); - // 去除首尾"(pgsql) - field = StringUtil.trimLeadingCharacter(field, '"'); - field = StringUtil.trimTrailingCharacter(field, '"'); - // 去除首尾[](SqlServer) - field = StringUtil.trimLeadingCharacter(field, '['); - field = StringUtil.trimTrailingCharacter(field, ']'); - return field; - } - - /** - * 下划线转驼峰 - * @param param 内容 - * @return 返回转换后的字符串 - */ - public static String underlineToCamel(String param) { - if (param == null || "".equals(param.trim())) { - return ""; - } - int len = param.length(); - StringBuilder sb = new StringBuilder(len); - for (int i = 0; i < len; i++) { - char c = param.charAt(i); - if (c == UNDERLINE) { - if (++i < len) { - sb.append(Character.toUpperCase(param.charAt(i))); - } - } else { - sb.append(c); - } - } - return sb.toString(); - } - - /** - * 字段是否被transient关键字修饰或有@Transient注解 - * @param field 字段 - * @return 是返回true - */ - public static boolean isTransientField(Field field) { - return Modifier.isTransient(field.getModifiers()); - } - - private static boolean isEmpty(String s) { - return s == null || s.trim().length() == 0; - } - - private static boolean isNotEmpty(String s) { - return !isEmpty(s); - } - - public static boolean isPk(Field field, FastmybatisConfig config) { - String pkName = FieldUtil.getPkAnnotation(field) - .map(Pk::name) - .orElse(""); - if ("".equals(pkName)) { - pkName = config.getGlobalIdName(); - } - return pkName.equalsIgnoreCase(FieldUtil.camelToUnderline(field.getName())); - } - - /** - * 是否是主键并且没有指定主键策略 - * @param field 字段 - * @return true:是 - */ - public static boolean isPkStrategyNone(Field field, FastmybatisConfig config) { - if (!isPk(field, config)) { - return false; - } - return getPkStrategy(field) - .orElse(PkStrategy.INCREMENT) == PkStrategy.NONE; - } - - public static Optional getTableAnnotation(Field field) { - Class entityClass = field.getDeclaringClass(); - return getTableAnnotation(entityClass); - } - - public static Optional
getTableAnnotation(Class entityClass) { - Table table = ClassUtil.findAnnotation(entityClass, Table.class); - return Optional.ofNullable(table); - } - - /** - * 返回主键策略 - * @param field 字段 - * @return 主键策略 - */ - public static Optional getPkStrategy(Field field) { - return getPkAnnotation(field).map(Pk::strategy); - } - - /** - * 返回主键配置 - * @param field 字段 - * @return 主键策略 - */ - public static Optional getPkAnnotation(Field field) { - return getTableAnnotation(field).map(Table::pk); - } - - /** - * 是否主键自增 - * @param field 字段 - * @return true:是 - */ - public static boolean isIncrement(Field field) { - return getPkStrategy(field).orElse(PkStrategy.NONE) == PkStrategy.INCREMENT; - } - - /** - * 是否是UUID字段 - * @param field 字段 - * @return true:是 - */ - public static boolean isUuid(Field field) { - return getPkStrategy(field) - .orElse(PkStrategy.NONE) == PkStrategy.UUID; - } - - /** - * 是否是seq字段 - * @param field 字段 - * @return true:是 - */ - public static boolean isSequence(Field field) { - return isNotEmpty(getSequenceName(field)); - } - - /** - * 返回seq名称 - * @param field 字段 - * @return 没有返回null - */ - public static String getSequenceName(Field field) { - return getTableAnnotation(field) - .map(Table::pk) - .map(Pk::sequenceName) - .orElse(null); - } - - /** - * 是否是乐观锁字段 - */ - public static boolean isVersionColumn(Field field) { - return getColumnAnnotation(field) - .map(Column::version) - .orElse(false); - } - - public static String getColumnName(Field field, FastmybatisConfig config) { - String name = getColumnAnnotation(field) - .map(Column::name) - .orElse(null); - // 没有注解使用java字段名 - if (isEmpty(name)) { - String javaFieldName = field.getName(); - // 如果开启了驼峰转下划线形式 - name = config.isCamel2underline() ? FieldUtil.camelToUnderline(field.getName()) : javaFieldName; - } - return name; - } - - public static Optional getColumnAnnotation(Field field) { - return Optional.ofNullable(field.getAnnotation(Column.class)); - } - - public static boolean hasTableAnnotation(Field field) { - Class declaringClass = field.getDeclaringClass(); - return ClassUtil.findAnnotation(declaringClass, Table.class) != null; - } - - /** - * 懒加载对象字段名 - */ - public static String getLazyEntityColumnName(Field field, FastmybatisConfig config) { - Boolean lazy = getColumnAnnotation(field) - .map(Column::lazyFetch) - .orElse(false); - if (lazy) { - return getColumnName(field, config); - } - LazyFetch annotation = field.getAnnotation(LazyFetch.class); - if (annotation != null) { - String column = annotation.column(); - if ("".equals(column)) { - throw new IllegalArgumentException("必须指定LazyFetch.column值"); - } - } - return null; - } - - public static LogicDeleteDefinition getLogicDeleteDefinition(Field field) { - Column column = field.getAnnotation(Column.class); - if (column != null && column.logicDelete()) { - LogicDeleteDefinition logicDeleteDefinition = new LogicDeleteDefinition(); - logicDeleteDefinition.setDeleteValue(column.deleteValue()); - logicDeleteDefinition.setNotDeleteValue(column.notDeleteValue()); - return logicDeleteDefinition; - } - LogicDelete logicDelete = field.getAnnotation(LogicDelete.class); - if (logicDelete != null) { - LogicDeleteDefinition logicDeleteDefinition = new LogicDeleteDefinition(); - logicDeleteDefinition.setDeleteValue(logicDelete.deleteValue()); - logicDeleteDefinition.setNotDeleteValue(logicDelete.notDeleteValue()); - return logicDeleteDefinition; - } - return null; - } + } + + private static final String UUID_NAME = "uuid"; + private static final String INCREMENT_NAME = "increment"; + private static final String SEQUENCE_NAME = "seq"; + private static final String STRING_TYPE = "String"; + private static final String DOT = "."; + + /** + * 过滤"." + * + * @param field 字段名 + * @return 过滤‘.’符号 + */ + public static String dotFilter(String field) { + if (isNotEmpty(field) && field.contains(DOT)) { + String[] words = field.split("\\."); + StringBuilder ret = new StringBuilder(); + for (String str : words) { + ret.append(upperFirstLetter(str)); + } + return ret.toString(); + } + return field; + } + + /** + * 将第一个字母转换成大写 + * + * @param str 内容 + * @return 返回原字符串且第一个字符大写 + */ + public static String upperFirstLetter(String str) { + if (isNotEmpty(str)) { + String firstUpper = String.valueOf(str.charAt(0)).toUpperCase(); + str = firstUpper + str.substring(1); + } + return str; + } + + /** + * 将第一个字母转换成小写 + * + * @param str 内容 + * @return 返回原字符串且第一个字母小写 + */ + public static String lowerFirstLetter(String str) { + if (isNotEmpty(str)) { + String firstLower = String.valueOf(str.charAt(0)).toLowerCase(); + str = firstLower + str.substring(1); + } + return str; + } + + public static final char UNDERLINE = '_'; + + /** + * 驼峰转下划线 + * + * @param param 内容 + * @return 返回转换后的字符串 + */ + public static String camelToUnderline(String param) { + if (param == null || "".equals(param.trim())) { + return ""; + } + int len = param.length(); + StringBuilder sb = new StringBuilder(len); + for (int i = 0; i < len; i++) { + char c = param.charAt(i); + int preIndex = i - 1; + int nextIndex = i + 1; + // 是否需要变为小写字母 + boolean needToLower = ( + Character.isUpperCase(c) + && preIndex > 0 + && Character.isLowerCase(param.charAt(preIndex)) + ) + || + ( + Character.isUpperCase(c) + && nextIndex < len + && Character.isLowerCase(param.charAt(nextIndex)) + ); + + if (needToLower) { + if (i > 0) { + sb.append(UNDERLINE); + } + sb.append(Character.toLowerCase(c)); + } else { + sb.append(c); + } + } + return sb.toString(); + } + + public static String formatField(String field) { + // t.`username` + String[] arr = field.split("\\."); + if (arr.length == 2) { + field = arr[1]; + } + // 去除首尾`(mysql) + field = StringUtil.trimLeadingCharacter(field, '`'); + field = StringUtil.trimTrailingCharacter(field, '`'); + // 去除首尾"(pgsql) + field = StringUtil.trimLeadingCharacter(field, '"'); + field = StringUtil.trimTrailingCharacter(field, '"'); + // 去除首尾[](SqlServer) + field = StringUtil.trimLeadingCharacter(field, '['); + field = StringUtil.trimTrailingCharacter(field, ']'); + return field; + } + + /** + * 下划线转驼峰 + * + * @param param 内容 + * @return 返回转换后的字符串 + */ + public static String underlineToCamel(String param) { + if (param == null || "".equals(param.trim())) { + return ""; + } + int len = param.length(); + StringBuilder sb = new StringBuilder(len); + for (int i = 0; i < len; i++) { + char c = param.charAt(i); + if (c == UNDERLINE) { + if (++i < len) { + sb.append(Character.toUpperCase(param.charAt(i))); + } + } else { + sb.append(c); + } + } + return sb.toString(); + } + + /** + * 字段是否被transient关键字修饰或有@Transient注解 + * + * @param field 字段 + * @return 是返回true + */ + public static boolean isTransientField(Field field) { + return Modifier.isTransient(field.getModifiers()); + } + + private static boolean isEmpty(String s) { + return s == null || s.trim().length() == 0; + } + + private static boolean isNotEmpty(String s) { + return !isEmpty(s); + } + + public static boolean isPk(Field field, FastmybatisConfig config) { + String pkName = FieldUtil.getPkAnnotation(field) + .map(Pk::name) + .orElse(""); + if ("".equals(pkName)) { + pkName = config.getGlobalIdName(); + } + return pkName.equalsIgnoreCase(FieldUtil.camelToUnderline(field.getName())); + } + + /** + * 是否是主键并且没有指定主键策略 + * + * @param field 字段 + * @return true:是 + */ + public static boolean isPkStrategyNone(Field field, FastmybatisConfig config) { + if (!isPk(field, config)) { + return false; + } + return getPkStrategy(field) + .orElse(PkStrategy.INCREMENT) == PkStrategy.NONE; + } + + public static Optional
getTableAnnotation(Field field) { + Class entityClass = field.getDeclaringClass(); + return getTableAnnotation(entityClass); + } + + public static Optional
getTableAnnotation(Class entityClass) { + Table table = ClassUtil.findAnnotation(entityClass, Table.class); + return Optional.ofNullable(table); + } + + /** + * 返回主键策略 + * + * @param field 字段 + * @return 主键策略 + */ + public static Optional getPkStrategy(Field field) { + return getPkAnnotation(field).map(Pk::strategy); + } + + /** + * 返回主键配置 + * + * @param field 字段 + * @return 主键策略 + */ + public static Optional getPkAnnotation(Field field) { + return getTableAnnotation(field).map(Table::pk); + } + + /** + * 是否主键自增 + * + * @param field 字段 + * @return true:是 + */ + public static boolean isIncrement(Field field) { + return getPkStrategy(field).orElse(PkStrategy.NONE) == PkStrategy.INCREMENT; + } + + /** + * 是否是UUID字段 + * + * @param field 字段 + * @return true:是 + */ + public static boolean isUuid(Field field) { + return getPkStrategy(field) + .orElse(PkStrategy.NONE) == PkStrategy.UUID; + } + + /** + * 是否是seq字段 + * + * @param field 字段 + * @return true:是 + */ + public static boolean isSequence(Field field) { + return isNotEmpty(getSequenceName(field)); + } + + /** + * 返回seq名称 + * + * @param field 字段 + * @return 没有返回null + */ + public static String getSequenceName(Field field) { + return getTableAnnotation(field) + .map(Table::pk) + .map(Pk::sequenceName) + .orElse(null); + } + + /** + * 是否是乐观锁字段 + */ + public static boolean isVersionColumn(Field field) { + return getColumnAnnotation(field) + .map(Column::version) + .orElse(false); + } + + public static String getColumnName(Field field, FastmybatisConfig config) { + String name = getColumnAnnotation(field) + .map(Column::name) + .orElse(null); + // 没有注解使用java字段名 + if (isEmpty(name)) { + String javaFieldName = field.getName(); + // 如果开启了驼峰转下划线形式 + name = config.isCamel2underline() ? FieldUtil.camelToUnderline(field.getName()) : javaFieldName; + } + return name; + } + + public static Optional getColumnAnnotation(Field field) { + return Optional.ofNullable(field.getAnnotation(Column.class)); + } + + public static boolean hasTableAnnotation(Field field) { + Class declaringClass = field.getDeclaringClass(); + return ClassUtil.findAnnotation(declaringClass, Table.class) != null; + } + + /** + * 懒加载对象字段名 + */ + public static String getLazyEntityColumnName(Field field, FastmybatisConfig config) { + Boolean lazy = getColumnAnnotation(field) + .map(Column::lazyFetch) + .orElse(false); + if (lazy) { + return getColumnName(field, config); + } + LazyFetch annotation = field.getAnnotation(LazyFetch.class); + if (annotation != null) { + String column = annotation.column(); + if ("".equals(column)) { + throw new IllegalArgumentException("必须指定LazyFetch.column值"); + } + } + return null; + } + + public static LogicDeleteDefinition getLogicDeleteDefinition(Field field) { + Column column = field.getAnnotation(Column.class); + if (column != null) { + + + LogicDeleteDefinition logicDeleteDefinition = new LogicDeleteDefinition(); + logicDeleteDefinition.setLogicDeleteStrategy(column.logicDeleteStrategy()); + logicDeleteDefinition.setDeleteValue(column.deleteValue()); + logicDeleteDefinition.setNotDeleteValue(column.notDeleteValue()); + + + // 同时则配置以logicDeleteStrategy为准 + if (Objects.equals("", column.logicDeleteStrategy())) { + // 兼容老逻辑 + if (!column.logicDelete()) { + return null; + } else { + logicDeleteDefinition.setLogicDeleteStrategy(LogicDeleteStrategy.FIXED_VALUE); + } + } else { + // 同事配置 + if (Objects.equals(LogicDeleteStrategy.NONE, column.logicDeleteStrategy())) { + return null; + } + } + + return logicDeleteDefinition; + } + + + LogicDelete logicDelete = field.getAnnotation(LogicDelete.class); + if (logicDelete != null) { + LogicDeleteDefinition logicDeleteDefinition = new LogicDeleteDefinition(); + // 兼容老逻辑 + logicDeleteDefinition.setLogicDeleteStrategy(LogicDeleteStrategy.FIXED_VALUE); + logicDeleteDefinition.setDeleteValue(logicDelete.deleteValue()); + logicDeleteDefinition.setNotDeleteValue(logicDelete.notDeleteValue()); + return logicDeleteDefinition; + } + return null; + } } -- Gitee From 5e0a6121b3d141f60ec4ed195f3cb836eb631b9d Mon Sep 17 00:00:00 2001 From: youbeiwuhuan Date: Sun, 23 Apr 2023 20:40:03 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=A8=A1=E6=9D=BF?= =?UTF-8?q?=E9=80=82=E9=85=8DlogicDeleteStrategy?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/resources/fastmybatis/tpl/dmdbms.vm | 46 +++++-- .../fastmybatis/tpl/microsoftsqlserver.vm | 46 +++++-- .../main/resources/fastmybatis/tpl/mysql.vm | 112 ++++++++++-------- .../main/resources/fastmybatis/tpl/oracle.vm | 46 +++++-- .../resources/fastmybatis/tpl/postgresql.vm | 50 ++++++-- .../main/resources/fastmybatis/tpl/sqlite.vm | 34 ++++-- 6 files changed, 231 insertions(+), 103 deletions(-) diff --git a/fastmybatis-core/src/main/resources/fastmybatis/tpl/dmdbms.vm b/fastmybatis-core/src/main/resources/fastmybatis/tpl/dmdbms.vm index ffac7ce..cf56c28 100644 --- a/fastmybatis-core/src/main/resources/fastmybatis/tpl/dmdbms.vm +++ b/fastmybatis-core/src/main/resources/fastmybatis/tpl/dmdbms.vm @@ -432,14 +432,16 @@ - #if(${table.hasLogicDeleteColumn}) + UPDATE ${table.tableName} #foreach($column in $columns) #if(${column.isPk}) - #elseif(${column.isLogicDelete}) + #elseif($column.logicDeleteStrategy == 'fixed_value') ${table.logicDeleteColumn.columnName} = ${table.logicDeleteColumn.logicDeleteValueString}, + #elseif($column.logicDeleteStrategy == 'id_fill') + ${table.logicDeleteColumn.columnName} = ${pk.columnName}, #end #end @@ -448,21 +450,25 @@ #if(${table.hasVersionColumn}) AND ${table.versionColumn.columnName} = #{${table.versionColumn.javaFieldName}} #end + #else + DELETE FROM ${table.tableName} WHERE ${pk.columnName} = #{${pk.javaFieldName}} + #end - - #if(${table.hasLogicDeleteColumn}) + UPDATE ${table.tableName} #foreach($column in $columns) #if(${column.isPk}) - #elseif(${column.isLogicDelete}) + #elseif($column.logicDeleteStrategy == 'fixed_value') ${table.logicDeleteColumn.columnName} = ${table.logicDeleteColumn.logicDeleteValueString}, + #elseif($column.logicDeleteStrategy == 'id_fill') + ${table.logicDeleteColumn.columnName} = ${pk.columnName}, #end #end @@ -471,17 +477,37 @@ #if(${table.hasVersionColumn}) AND ${table.versionColumn.columnName} = #{${table.versionColumn.javaFieldName}} #end + #else + DELETE FROM ${table.tableName} WHERE ${pk.columnName} = #{value} + #end - - - DELETE FROM ${table.tableName} - - + #if(${table.hasLogicDeleteColumn}) + + UPDATE ${table.tableName} + + #foreach($column in $columns) + #if(${column.isPk}) + #elseif($column.logicDeleteStrategy == 'fixed_value') + ${table.logicDeleteColumn.columnName} = ${table.logicDeleteColumn.logicDeleteValueString}, + #elseif($column.logicDeleteStrategy == 'id_fill') + ${table.logicDeleteColumn.columnName} = ${pk.columnName}, + #end + #end + + + AND ${table.logicDeleteColumn.columnName} = ${table.logicDeleteColumn.logicNotDeleteValueString} + + #else + + DELETE FROM `${table.tableName}` + + + #end diff --git a/fastmybatis-core/src/main/resources/fastmybatis/tpl/microsoftsqlserver.vm b/fastmybatis-core/src/main/resources/fastmybatis/tpl/microsoftsqlserver.vm index 72ec756..7100361 100644 --- a/fastmybatis-core/src/main/resources/fastmybatis/tpl/microsoftsqlserver.vm +++ b/fastmybatis-core/src/main/resources/fastmybatis/tpl/microsoftsqlserver.vm @@ -423,14 +423,16 @@ - #if(${table.hasLogicDeleteColumn}) + UPDATE ${table.tableName} #foreach($column in $columns) #if(${column.isPk}) - #elseif(${column.isLogicDelete}) + #elseif($column.logicDeleteStrategy == 'fixed_value') ${table.logicDeleteColumn.columnName} = ${table.logicDeleteColumn.logicDeleteValueString}, + #elseif($column.logicDeleteStrategy == 'id_fill') + ${table.logicDeleteColumn.columnName} = ${pk.columnName}, #end #end @@ -439,21 +441,25 @@ #if(${table.hasVersionColumn}) AND ${table.versionColumn.columnName} = #{${table.versionColumn.javaFieldName}} #end + #else + DELETE FROM ${table.tableName} WHERE ${pk.columnName} = #{${pk.javaFieldName}} + #end - - #if(${table.hasLogicDeleteColumn}) + UPDATE ${table.tableName} #foreach($column in $columns) #if(${column.isPk}) - #elseif(${column.isLogicDelete}) + #elseif($column.logicDeleteStrategy == 'fixed_value') ${table.logicDeleteColumn.columnName} = ${table.logicDeleteColumn.logicDeleteValueString}, + #elseif($column.logicDeleteStrategy == 'id_fill') + ${table.logicDeleteColumn.columnName} = ${pk.columnName}, #end #end @@ -462,18 +468,38 @@ #if(${table.hasVersionColumn}) AND ${table.versionColumn.columnName} = #{${table.versionColumn.javaFieldName}} #end + #else + DELETE FROM ${table.tableName} WHERE ${pk.columnName} = #{value} + #end - - - DELETE FROM [${table.tableName}] - - + #if(${table.hasLogicDeleteColumn}) + + UPDATE ${table.tableName} + + #foreach($column in $columns) + #if(${column.isPk}) + #elseif($column.logicDeleteStrategy == 'fixed_value') + ${table.logicDeleteColumn.columnName} = ${table.logicDeleteColumn.logicDeleteValueString}, + #elseif($column.logicDeleteStrategy == 'id_fill') + ${table.logicDeleteColumn.columnName} = ${pk.columnName}, + #end + #end + + + AND ${table.logicDeleteColumn.columnName} = ${table.logicDeleteColumn.logicNotDeleteValueString} + + #else + + DELETE FROM `${table.tableName}` + + + #end diff --git a/fastmybatis-core/src/main/resources/fastmybatis/tpl/mysql.vm b/fastmybatis-core/src/main/resources/fastmybatis/tpl/mysql.vm index fa45705..6f103f5 100644 --- a/fastmybatis-core/src/main/resources/fastmybatis/tpl/mysql.vm +++ b/fastmybatis-core/src/main/resources/fastmybatis/tpl/mysql.vm @@ -402,70 +402,82 @@ - - #if(${table.hasLogicDeleteColumn}) - UPDATE ${table.tableName} - - #foreach($column in $columns) - #if(${column.isPk}) - #elseif(${column.isLogicDelete}) - ${table.logicDeleteColumn.columnName} = ${table.logicDeleteColumn.logicDeleteValueString}, - #end + #if(${table.hasLogicDeleteColumn}) + + UPDATE ${table.tableName} + + #foreach($column in $columns) + #if(${column.isPk}) + #elseif($column.logicDeleteStrategy == 'fixed_value') + ${table.logicDeleteColumn.columnName} = ${table.logicDeleteColumn.logicDeleteValueString}, + #elseif($column.logicDeleteStrategy == 'id_fill') + ${table.logicDeleteColumn.columnName} = ${pk.columnName}, #end - - WHERE ${pk.columnName} = #{${pk.javaFieldName}} - AND ${table.logicDeleteColumn.columnName} = ${table.logicDeleteColumn.logicNotDeleteValueString} - #if(${table.hasVersionColumn}) - AND ${table.versionColumn.columnName} = #{${table.versionColumn.javaFieldName}} #end - #else - DELETE FROM ${table.tableName} - WHERE ${pk.columnName} = #{${pk.javaFieldName}} + + WHERE ${pk.columnName} = #{${pk.javaFieldName}} + AND ${table.logicDeleteColumn.columnName} = ${table.logicDeleteColumn.logicNotDeleteValueString} + #if(${table.hasVersionColumn}) + AND ${table.versionColumn.columnName} = #{${table.versionColumn.javaFieldName}} #end + + #else + + DELETE FROM ${table.tableName} + WHERE ${pk.columnName} = #{${pk.javaFieldName}} + #end - - #if(${table.hasLogicDeleteColumn}) - UPDATE ${table.tableName} - - #foreach($column in $columns) - #if(${column.isPk}) - #elseif(${column.isLogicDelete}) - ${table.logicDeleteColumn.columnName} = ${table.logicDeleteColumn.logicDeleteValueString}, - #end + #if(${table.hasLogicDeleteColumn}) + + UPDATE ${table.tableName} + + #foreach($column in $columns) + #if(${column.isPk}) + #elseif($column.logicDeleteStrategy == 'fixed_value') + ${table.logicDeleteColumn.columnName} = ${table.logicDeleteColumn.logicDeleteValueString}, + #elseif($column.logicDeleteStrategy == 'id_fill') + ${table.logicDeleteColumn.columnName} = ${pk.columnName}, #end - - WHERE ${pk.columnName} = #{value} - AND ${table.logicDeleteColumn.columnName} = ${table.logicDeleteColumn.logicNotDeleteValueString} - #if(${table.hasVersionColumn}) - AND ${table.versionColumn.columnName} = #{${table.versionColumn.javaFieldName}} #end - #else - DELETE FROM ${table.tableName} - WHERE ${pk.columnName} = #{value} + + WHERE ${pk.columnName} = #{value} + AND ${table.logicDeleteColumn.columnName} = ${table.logicDeleteColumn.logicNotDeleteValueString} + #if(${table.hasVersionColumn}) + AND ${table.versionColumn.columnName} = #{${table.versionColumn.javaFieldName}} #end + + #else + + DELETE FROM ${table.tableName} + WHERE ${pk.columnName} = #{value} + #end - - #if(${table.hasLogicDeleteColumn}) - UPDATE ${table.tableName} - - #foreach($column in $columns) - #if(${column.isPk}) - #elseif(${column.isLogicDelete}) - ${table.logicDeleteColumn.columnName} = ${table.logicDeleteColumn.logicDeleteValueString}, - #end + #if(${table.hasLogicDeleteColumn}) + + UPDATE ${table.tableName} + + #foreach($column in $columns) + #if(${column.isPk}) + #elseif($column.logicDeleteStrategy == 'fixed_value') + ${table.logicDeleteColumn.columnName} = ${table.logicDeleteColumn.logicDeleteValueString}, + #elseif($column.logicDeleteStrategy == 'id_fill') + ${table.logicDeleteColumn.columnName} = ${pk.columnName}, #end - - - AND ${table.logicDeleteColumn.columnName} = ${table.logicDeleteColumn.logicNotDeleteValueString} - #else - DELETE FROM `${table.tableName}` - - #end + #end + + + AND ${table.logicDeleteColumn.columnName} = ${table.logicDeleteColumn.logicNotDeleteValueString} + + #else + + DELETE FROM `${table.tableName}` + + #end diff --git a/fastmybatis-core/src/main/resources/fastmybatis/tpl/oracle.vm b/fastmybatis-core/src/main/resources/fastmybatis/tpl/oracle.vm index c624a37..76ea302 100644 --- a/fastmybatis-core/src/main/resources/fastmybatis/tpl/oracle.vm +++ b/fastmybatis-core/src/main/resources/fastmybatis/tpl/oracle.vm @@ -432,14 +432,16 @@ - #if(${table.hasLogicDeleteColumn}) + UPDATE ${table.tableName} #foreach($column in $columns) #if(${column.isPk}) - #elseif(${column.isLogicDelete}) + #elseif($column.logicDeleteStrategy == 'fixed_value') ${table.logicDeleteColumn.columnName} = ${table.logicDeleteColumn.logicDeleteValueString}, + #elseif($column.logicDeleteStrategy == 'id_fill') + ${table.logicDeleteColumn.columnName} = ${pk.columnName}, #end #end @@ -448,21 +450,25 @@ #if(${table.hasVersionColumn}) AND ${table.versionColumn.columnName} = #{${table.versionColumn.javaFieldName}} #end + #else + DELETE FROM ${table.tableName} WHERE ${pk.columnName} = #{${pk.javaFieldName}} + #end - - #if(${table.hasLogicDeleteColumn}) + UPDATE ${table.tableName} #foreach($column in $columns) #if(${column.isPk}) - #elseif(${column.isLogicDelete}) + #elseif($column.logicDeleteStrategy == 'fixed_value') ${table.logicDeleteColumn.columnName} = ${table.logicDeleteColumn.logicDeleteValueString}, + #elseif($column.logicDeleteStrategy == 'id_fill') + ${table.logicDeleteColumn.columnName} = ${pk.columnName}, #end #end @@ -471,17 +477,37 @@ #if(${table.hasVersionColumn}) AND ${table.versionColumn.columnName} = #{${table.versionColumn.javaFieldName}} #end + #else + DELETE FROM ${table.tableName} WHERE ${pk.columnName} = #{value} + #end - - - DELETE FROM ${table.tableName} - - + #if(${table.hasLogicDeleteColumn}) + + UPDATE ${table.tableName} + + #foreach($column in $columns) + #if(${column.isPk}) + #elseif($column.logicDeleteStrategy == 'fixed_value') + ${table.logicDeleteColumn.columnName} = ${table.logicDeleteColumn.logicDeleteValueString}, + #elseif($column.logicDeleteStrategy == 'id_fill') + ${table.logicDeleteColumn.columnName} = ${pk.columnName}, + #end + #end + + + AND ${table.logicDeleteColumn.columnName} = ${table.logicDeleteColumn.logicNotDeleteValueString} + + #else + + DELETE FROM `${table.tableName}` + + + #end diff --git a/fastmybatis-core/src/main/resources/fastmybatis/tpl/postgresql.vm b/fastmybatis-core/src/main/resources/fastmybatis/tpl/postgresql.vm index 42282b6..5b0b576 100644 --- a/fastmybatis-core/src/main/resources/fastmybatis/tpl/postgresql.vm +++ b/fastmybatis-core/src/main/resources/fastmybatis/tpl/postgresql.vm @@ -383,14 +383,16 @@ - #if(${table.hasLogicDeleteColumn}) - UPDATE ${table.tableName} + + UPDATE ${table.tableName} #foreach($column in $columns) #if(${column.isPk}) - #elseif(${column.isLogicDelete}) + #elseif($column.logicDeleteStrategy == 'fixed_value') ${table.logicDeleteColumn.columnName} = ${table.logicDeleteColumn.logicDeleteValueString}, + #elseif($column.logicDeleteStrategy == 'id_fill') + ${table.logicDeleteColumn.columnName} = ${pk.columnName}, #end #end @@ -399,21 +401,25 @@ #if(${table.hasVersionColumn}) AND ${table.versionColumn.columnName} = #{${table.versionColumn.javaFieldName}} #end + #else + DELETE FROM ${table.tableName} WHERE ${pk.columnName} = #{${pk.javaFieldName}} + #end - - #if(${table.hasLogicDeleteColumn}) - UPDATE ${table.tableName} + + UPDATE ${table.tableName} #foreach($column in $columns) #if(${column.isPk}) - #elseif(${column.isLogicDelete}) + #elseif($column.logicDeleteStrategy == 'fixed_value') ${table.logicDeleteColumn.columnName} = ${table.logicDeleteColumn.logicDeleteValueString}, + #elseif($column.logicDeleteStrategy == 'id_fill') + ${table.logicDeleteColumn.columnName} = ${pk.columnName}, #end #end @@ -422,17 +428,37 @@ #if(${table.hasVersionColumn}) AND ${table.versionColumn.columnName} = #{${table.versionColumn.javaFieldName}} #end + #else + DELETE FROM ${table.tableName} WHERE ${pk.columnName} = #{value} + #end - - - DELETE FROM "${table.tableName}" - - + #if(${table.hasLogicDeleteColumn}) + + UPDATE ${table.tableName} + + #foreach($column in $columns) + #if(${column.isPk}) + #elseif($column.logicDeleteStrategy == 'fixed_value') + ${table.logicDeleteColumn.columnName} = ${table.logicDeleteColumn.logicDeleteValueString}, + #elseif($column.logicDeleteStrategy == 'id_fill') + ${table.logicDeleteColumn.columnName} = ${pk.columnName}, + #end + #end + + + AND ${table.logicDeleteColumn.columnName} = ${table.logicDeleteColumn.logicNotDeleteValueString} + + #else + + DELETE FROM `${table.tableName}` + + + #end diff --git a/fastmybatis-core/src/main/resources/fastmybatis/tpl/sqlite.vm b/fastmybatis-core/src/main/resources/fastmybatis/tpl/sqlite.vm index b6cf490..727c4e3 100644 --- a/fastmybatis-core/src/main/resources/fastmybatis/tpl/sqlite.vm +++ b/fastmybatis-core/src/main/resources/fastmybatis/tpl/sqlite.vm @@ -402,14 +402,16 @@ - #if(${table.hasLogicDeleteColumn}) - UPDATE ${table.tableName} + + UPDATE ${table.tableName} #foreach($column in $columns) #if(${column.isPk}) - #elseif(${column.isLogicDelete}) + #elseif($column.logicDeleteStrategy == 'fixed_value') ${table.logicDeleteColumn.columnName} = ${table.logicDeleteColumn.logicDeleteValueString}, + #elseif($column.logicDeleteStrategy == 'id_fill') + ${table.logicDeleteColumn.columnName} = ${pk.columnName}, #end #end @@ -418,21 +420,25 @@ #if(${table.hasVersionColumn}) AND ${table.versionColumn.columnName} = #{${table.versionColumn.javaFieldName}} #end + #else + DELETE FROM ${table.tableName} WHERE ${pk.columnName} = #{${pk.javaFieldName}} + #end - - #if(${table.hasLogicDeleteColumn}) - UPDATE ${table.tableName} + + UPDATE ${table.tableName} #foreach($column in $columns) #if(${column.isPk}) - #elseif(${column.isLogicDelete}) + #elseif($column.logicDeleteStrategy == 'fixed_value') ${table.logicDeleteColumn.columnName} = ${table.logicDeleteColumn.logicDeleteValueString}, + #elseif($column.logicDeleteStrategy == 'id_fill') + ${table.logicDeleteColumn.columnName} = ${pk.columnName}, #end #end @@ -441,31 +447,37 @@ #if(${table.hasVersionColumn}) AND ${table.versionColumn.columnName} = #{${table.versionColumn.javaFieldName}} #end + #else + DELETE FROM ${table.tableName} WHERE ${pk.columnName} = #{value} + #end - - #if(${table.hasLogicDeleteColumn}) + UPDATE ${table.tableName} #foreach($column in $columns) #if(${column.isPk}) - #elseif(${column.isLogicDelete}) + #elseif($column.logicDeleteStrategy == 'fixed_value') ${table.logicDeleteColumn.columnName} = ${table.logicDeleteColumn.logicDeleteValueString}, + #elseif($column.logicDeleteStrategy == 'id_fill') + ${table.logicDeleteColumn.columnName} = ${pk.columnName}, #end #end AND ${table.logicDeleteColumn.columnName} = ${table.logicDeleteColumn.logicNotDeleteValueString} + #else + DELETE FROM `${table.tableName}` + #end - -- Gitee From f7df77077d83fbbb54a89aea45ca3f4d8100625c Mon Sep 17 00:00:00 2001 From: youbeiwuhuan Date: Sun, 23 Apr 2023 20:56:12 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E6=B5=8B=E8=AF=95logicDeleteStrategy?= =?UTF-8?q?=E7=AD=96=E7=95=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/myapp/entity/TUser.java | 3 ++- .../src/main/resources/application.properties | 2 +- .../test/java/com/myapp/UserMapperTest.java | 21 +++++++++++++++++++ .../t_user-mysql.sql | 2 +- 4 files changed, 25 insertions(+), 3 deletions(-) diff --git a/fastmybatis-demo/fastmybatis-demo-springboot/src/main/java/com/myapp/entity/TUser.java b/fastmybatis-demo/fastmybatis-demo-springboot/src/main/java/com/myapp/entity/TUser.java index c703098..a3df6de 100644 --- a/fastmybatis-demo/fastmybatis-demo-springboot/src/main/java/com/myapp/entity/TUser.java +++ b/fastmybatis-demo/fastmybatis-demo-springboot/src/main/java/com/myapp/entity/TUser.java @@ -4,6 +4,7 @@ import com.gitee.fastmybatis.annotation.Column; import com.gitee.fastmybatis.annotation.Pk; import com.gitee.fastmybatis.annotation.PkStrategy; import com.gitee.fastmybatis.annotation.Table; +import com.gitee.fastmybatis.core.ext.code.generator.LogicDeleteStrategy; import java.math.BigDecimal; import java.util.Date; @@ -28,7 +29,7 @@ public class TUser { private Byte state; /** 是否删除, 数据库字段:isdel */ - @Column(logicDelete = true) + @Column(logicDeleteStrategy = LogicDeleteStrategy.ID_FILL) private Boolean isdel; /** 备注, 数据库字段:remark */ diff --git a/fastmybatis-demo/fastmybatis-demo-springboot/src/main/resources/application.properties b/fastmybatis-demo/fastmybatis-demo-springboot/src/main/resources/application.properties index 8ec6da1..c765f92 100644 --- a/fastmybatis-demo/fastmybatis-demo-springboot/src/main/resources/application.properties +++ b/fastmybatis-demo/fastmybatis-demo-springboot/src/main/resources/application.properties @@ -3,7 +3,7 @@ spring.profiles.active=dev # mysql mysql.host=127.0.0.1:3306 mysql.username=root -mysql.password=root +mysql.password=fan1988 mysql.db=stu spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver diff --git a/fastmybatis-demo/fastmybatis-demo-springboot/src/test/java/com/myapp/UserMapperTest.java b/fastmybatis-demo/fastmybatis-demo-springboot/src/test/java/com/myapp/UserMapperTest.java index ab0b58b..98e9aa2 100644 --- a/fastmybatis-demo/fastmybatis-demo-springboot/src/test/java/com/myapp/UserMapperTest.java +++ b/fastmybatis-demo/fastmybatis-demo-springboot/src/test/java/com/myapp/UserMapperTest.java @@ -1,5 +1,6 @@ package com.myapp; +import com.gitee.fastmybatis.core.query.Query; import com.myapp.dao.TUserMapper; import com.myapp.entity.TUser; import org.junit.Test; @@ -41,4 +42,24 @@ public class UserMapperTest extends BaseTest { System.out.println(user); } + @Test + public void deleteById() { + int effectRows=userMapper.deleteById(1); + System.out.println(effectRows); + } + + @Test + public void delete() { + TUser user = new TUser(); + user.setId(2); + int effectRows=userMapper.delete(user); + System.out.println(effectRows); + } + @Test + public void deleteByQuery() { + Query query = new Query(); + query.eq("id", 3); + int effectRows=userMapper.deleteByQuery(query); + System.out.println(effectRows); + } } diff --git a/fastmybatis-demo/fastmybatis-demo-springboot/t_user-mysql.sql b/fastmybatis-demo/fastmybatis-demo-springboot/t_user-mysql.sql index fb5b75c..45aa52c 100644 --- a/fastmybatis-demo/fastmybatis-demo-springboot/t_user-mysql.sql +++ b/fastmybatis-demo/fastmybatis-demo-springboot/t_user-mysql.sql @@ -7,7 +7,7 @@ CREATE TABLE `t_user` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID', `username` varchar(255) DEFAULT NULL COMMENT '用户名', `state` tinyint(4) DEFAULT NULL COMMENT '状态', - `isdel` bit(1) DEFAULT NULL COMMENT '是否删除', + `isdel` int(11) DEFAULT NULL COMMENT '是否删除', `remark` text COMMENT '备注', `add_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '添加时间', `money` decimal(10,2) DEFAULT NULL COMMENT '金额', -- Gitee From a8b800ef1ae5c96208e35095f253b52ce5e9fb89 Mon Sep 17 00:00:00 2001 From: fanbeibei Date: Wed, 26 Apr 2023 18:27:49 +0800 Subject: [PATCH 4/4] =?UTF-8?q?LogicDeleteStrategy=E5=8F=98=E4=B8=BA?= =?UTF-8?q?=E6=9E=9A=E4=B8=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../gitee/fastmybatis/annotation/Column.java | 7 ++--- .../annotation}/LogicDeleteStrategy.java | 24 ++++++++------- .../fastmybatis/core/FastmybatisConfig.java | 4 +-- .../core/ext/code/util/FieldUtil.java | 25 +++------------- .../main/resources/fastmybatis/tpl/dmdbms.vm | 30 +++++++++++-------- .../fastmybatis/tpl/microsoftsqlserver.vm | 30 +++++++++++-------- .../main/resources/fastmybatis/tpl/mysql.vm | 30 +++++++++++-------- .../main/resources/fastmybatis/tpl/oracle.vm | 30 +++++++++++-------- .../resources/fastmybatis/tpl/postgresql.vm | 30 +++++++++++-------- .../main/resources/fastmybatis/tpl/sqlite.vm | 30 +++++++++++-------- .../src/main/java/com/myapp/entity/TUser.java | 4 +-- 11 files changed, 133 insertions(+), 111 deletions(-) rename {fastmybatis-core/src/main/java/com/gitee/fastmybatis/core/ext/code/generator => fastmybatis-annotation/src/main/java/com/gitee/fastmybatis/annotation}/LogicDeleteStrategy.java (49%) diff --git a/fastmybatis-annotation/src/main/java/com/gitee/fastmybatis/annotation/Column.java b/fastmybatis-annotation/src/main/java/com/gitee/fastmybatis/annotation/Column.java index f92ae90..f4bf53d 100644 --- a/fastmybatis-annotation/src/main/java/com/gitee/fastmybatis/annotation/Column.java +++ b/fastmybatis-annotation/src/main/java/com/gitee/fastmybatis/annotation/Column.java @@ -64,11 +64,10 @@ public @interface Column { boolean version() default false; /** - * 是否逻辑删除字段,废弃用{@link #logicDeleteStrategy()} 替代,同时配置logicDelete和logicDeleteStrategy则以logicDeleteStrategy为准 + * 是否逻辑删除字段 * * @return 该字段是否逻辑删除字段 */ - @Deprecated boolean logicDelete() default false; /** @@ -87,9 +86,9 @@ public @interface Column { /** - * 逻辑删除策略,默认none + * 逻辑删除策略,logicDelete为true时有效 * * @return */ - String logicDeleteStrategy() default ""; + LogicDeleteStrategy logicDeleteStrategy() default LogicDeleteStrategy.FIXED_VALUE; } \ No newline at end of file diff --git a/fastmybatis-core/src/main/java/com/gitee/fastmybatis/core/ext/code/generator/LogicDeleteStrategy.java b/fastmybatis-annotation/src/main/java/com/gitee/fastmybatis/annotation/LogicDeleteStrategy.java similarity index 49% rename from fastmybatis-core/src/main/java/com/gitee/fastmybatis/core/ext/code/generator/LogicDeleteStrategy.java rename to fastmybatis-annotation/src/main/java/com/gitee/fastmybatis/annotation/LogicDeleteStrategy.java index 50b542a..9a0404f 100644 --- a/fastmybatis-core/src/main/java/com/gitee/fastmybatis/core/ext/code/generator/LogicDeleteStrategy.java +++ b/fastmybatis-annotation/src/main/java/com/gitee/fastmybatis/annotation/LogicDeleteStrategy.java @@ -1,4 +1,4 @@ -package com.gitee.fastmybatis.core.ext.code.generator; +package com.gitee.fastmybatis.annotation; import java.util.concurrent.ConcurrentHashMap; @@ -11,25 +11,29 @@ import java.util.concurrent.ConcurrentHashMap; * @version 1.0.0 * @date 2023/4/23 14:43 */ -public class LogicDeleteStrategy { - private LogicDeleteStrategy() { - } - /** - * 不使用逻辑删除 - */ - public static final String NONE = "none"; +public enum LogicDeleteStrategy { /** * 固定值策略,notDeleteValue和deleteValue生效 */ - public static final String FIXED_VALUE = "fixed_value"; + FIXED_VALUE("fixed_value"), /** * 删除时主键填充逻辑删除字段策略 */ - public static final String ID_FILL = "id_fill"; + ID_FILL("id_fill"), + ; + + private String code; + LogicDeleteStrategy(String code) { + this.code = code; + } + + public String getCode() { + return code; + } } diff --git a/fastmybatis-core/src/main/java/com/gitee/fastmybatis/core/FastmybatisConfig.java b/fastmybatis-core/src/main/java/com/gitee/fastmybatis/core/FastmybatisConfig.java index df3a064..ab3ad9e 100644 --- a/fastmybatis-core/src/main/java/com/gitee/fastmybatis/core/FastmybatisConfig.java +++ b/fastmybatis-core/src/main/java/com/gitee/fastmybatis/core/FastmybatisConfig.java @@ -1,6 +1,6 @@ package com.gitee.fastmybatis.core; -import com.gitee.fastmybatis.core.ext.code.generator.LogicDeleteStrategy; +import com.gitee.fastmybatis.annotation.LogicDeleteStrategy; import com.gitee.fastmybatis.core.handler.BaseFill; import java.io.File; @@ -61,7 +61,7 @@ public class FastmybatisConfig { * 逻辑删除策略,默认LogicDeleteStrategy.FIXED_VALUE * */ - private String logicDeleteStrategy = LogicDeleteStrategy.NONE; + private String logicDeleteStrategy = LogicDeleteStrategy.FIXED_VALUE.getCode(); /** 逻辑删除,指定未删除时的值 */ private String logicNotDeleteValue = "0"; diff --git a/fastmybatis-core/src/main/java/com/gitee/fastmybatis/core/ext/code/util/FieldUtil.java b/fastmybatis-core/src/main/java/com/gitee/fastmybatis/core/ext/code/util/FieldUtil.java index a11a157..c54e450 100644 --- a/fastmybatis-core/src/main/java/com/gitee/fastmybatis/core/ext/code/util/FieldUtil.java +++ b/fastmybatis-core/src/main/java/com/gitee/fastmybatis/core/ext/code/util/FieldUtil.java @@ -8,7 +8,7 @@ import com.gitee.fastmybatis.core.FastmybatisConfig; import com.gitee.fastmybatis.core.annotation.LazyFetch; import com.gitee.fastmybatis.core.annotation.LogicDelete; import com.gitee.fastmybatis.core.ext.code.generator.LogicDeleteDefinition; -import com.gitee.fastmybatis.core.ext.code.generator.LogicDeleteStrategy; +import com.gitee.fastmybatis.annotation.LogicDeleteStrategy; import com.gitee.fastmybatis.core.util.ClassUtil; import com.gitee.fastmybatis.core.util.StringUtil; @@ -331,30 +331,13 @@ public class FieldUtil { public static LogicDeleteDefinition getLogicDeleteDefinition(Field field) { Column column = field.getAnnotation(Column.class); - if (column != null) { - + if (column != null && column.logicDelete()) { LogicDeleteDefinition logicDeleteDefinition = new LogicDeleteDefinition(); - logicDeleteDefinition.setLogicDeleteStrategy(column.logicDeleteStrategy()); + logicDeleteDefinition.setLogicDeleteStrategy(column.logicDeleteStrategy().getCode()); logicDeleteDefinition.setDeleteValue(column.deleteValue()); logicDeleteDefinition.setNotDeleteValue(column.notDeleteValue()); - - // 同时则配置以logicDeleteStrategy为准 - if (Objects.equals("", column.logicDeleteStrategy())) { - // 兼容老逻辑 - if (!column.logicDelete()) { - return null; - } else { - logicDeleteDefinition.setLogicDeleteStrategy(LogicDeleteStrategy.FIXED_VALUE); - } - } else { - // 同事配置 - if (Objects.equals(LogicDeleteStrategy.NONE, column.logicDeleteStrategy())) { - return null; - } - } - return logicDeleteDefinition; } @@ -363,7 +346,7 @@ public class FieldUtil { if (logicDelete != null) { LogicDeleteDefinition logicDeleteDefinition = new LogicDeleteDefinition(); // 兼容老逻辑 - logicDeleteDefinition.setLogicDeleteStrategy(LogicDeleteStrategy.FIXED_VALUE); + logicDeleteDefinition.setLogicDeleteStrategy(LogicDeleteStrategy.FIXED_VALUE.getCode()); logicDeleteDefinition.setDeleteValue(logicDelete.deleteValue()); logicDeleteDefinition.setNotDeleteValue(logicDelete.notDeleteValue()); return logicDeleteDefinition; diff --git a/fastmybatis-core/src/main/resources/fastmybatis/tpl/dmdbms.vm b/fastmybatis-core/src/main/resources/fastmybatis/tpl/dmdbms.vm index cf56c28..2a4dd83 100644 --- a/fastmybatis-core/src/main/resources/fastmybatis/tpl/dmdbms.vm +++ b/fastmybatis-core/src/main/resources/fastmybatis/tpl/dmdbms.vm @@ -438,10 +438,12 @@ #foreach($column in $columns) #if(${column.isPk}) - #elseif($column.logicDeleteStrategy == 'fixed_value') - ${table.logicDeleteColumn.columnName} = ${table.logicDeleteColumn.logicDeleteValueString}, - #elseif($column.logicDeleteStrategy == 'id_fill') - ${table.logicDeleteColumn.columnName} = ${pk.columnName}, + #elseif(${column.isLogicDelete}) + #if($column.logicDeleteStrategy == 'fixed_value') + ${table.logicDeleteColumn.columnName} = ${table.logicDeleteColumn.logicDeleteValueString}, + #elseif($column.logicDeleteStrategy == 'id_fill') + ${table.logicDeleteColumn.columnName} = ${pk.columnName}, + #end #end #end @@ -465,10 +467,12 @@ #foreach($column in $columns) #if(${column.isPk}) - #elseif($column.logicDeleteStrategy == 'fixed_value') - ${table.logicDeleteColumn.columnName} = ${table.logicDeleteColumn.logicDeleteValueString}, - #elseif($column.logicDeleteStrategy == 'id_fill') - ${table.logicDeleteColumn.columnName} = ${pk.columnName}, + #elseif(${column.isLogicDelete}) + #if($column.logicDeleteStrategy == 'fixed_value') + ${table.logicDeleteColumn.columnName} = ${table.logicDeleteColumn.logicDeleteValueString}, + #elseif($column.logicDeleteStrategy == 'id_fill') + ${table.logicDeleteColumn.columnName} = ${pk.columnName}, + #end #end #end @@ -492,10 +496,12 @@ #foreach($column in $columns) #if(${column.isPk}) - #elseif($column.logicDeleteStrategy == 'fixed_value') - ${table.logicDeleteColumn.columnName} = ${table.logicDeleteColumn.logicDeleteValueString}, - #elseif($column.logicDeleteStrategy == 'id_fill') - ${table.logicDeleteColumn.columnName} = ${pk.columnName}, + #elseif(${column.isLogicDelete}) + #if($column.logicDeleteStrategy == 'fixed_value') + ${table.logicDeleteColumn.columnName} = ${table.logicDeleteColumn.logicDeleteValueString}, + #elseif($column.logicDeleteStrategy == 'id_fill') + ${table.logicDeleteColumn.columnName} = ${pk.columnName}, + #end #end #end diff --git a/fastmybatis-core/src/main/resources/fastmybatis/tpl/microsoftsqlserver.vm b/fastmybatis-core/src/main/resources/fastmybatis/tpl/microsoftsqlserver.vm index 7100361..74932ea 100644 --- a/fastmybatis-core/src/main/resources/fastmybatis/tpl/microsoftsqlserver.vm +++ b/fastmybatis-core/src/main/resources/fastmybatis/tpl/microsoftsqlserver.vm @@ -429,10 +429,12 @@ #foreach($column in $columns) #if(${column.isPk}) - #elseif($column.logicDeleteStrategy == 'fixed_value') - ${table.logicDeleteColumn.columnName} = ${table.logicDeleteColumn.logicDeleteValueString}, - #elseif($column.logicDeleteStrategy == 'id_fill') - ${table.logicDeleteColumn.columnName} = ${pk.columnName}, + #elseif(${column.isLogicDelete}) + #if($column.logicDeleteStrategy == 'fixed_value') + ${table.logicDeleteColumn.columnName} = ${table.logicDeleteColumn.logicDeleteValueString}, + #elseif($column.logicDeleteStrategy == 'id_fill') + ${table.logicDeleteColumn.columnName} = ${pk.columnName}, + #end #end #end @@ -456,10 +458,12 @@ #foreach($column in $columns) #if(${column.isPk}) - #elseif($column.logicDeleteStrategy == 'fixed_value') - ${table.logicDeleteColumn.columnName} = ${table.logicDeleteColumn.logicDeleteValueString}, - #elseif($column.logicDeleteStrategy == 'id_fill') - ${table.logicDeleteColumn.columnName} = ${pk.columnName}, + #elseif(${column.isLogicDelete}) + #if($column.logicDeleteStrategy == 'fixed_value') + ${table.logicDeleteColumn.columnName} = ${table.logicDeleteColumn.logicDeleteValueString}, + #elseif($column.logicDeleteStrategy == 'id_fill') + ${table.logicDeleteColumn.columnName} = ${pk.columnName}, + #end #end #end @@ -484,10 +488,12 @@ #foreach($column in $columns) #if(${column.isPk}) - #elseif($column.logicDeleteStrategy == 'fixed_value') - ${table.logicDeleteColumn.columnName} = ${table.logicDeleteColumn.logicDeleteValueString}, - #elseif($column.logicDeleteStrategy == 'id_fill') - ${table.logicDeleteColumn.columnName} = ${pk.columnName}, + #elseif(${column.isLogicDelete}) + #if($column.logicDeleteStrategy == 'fixed_value') + ${table.logicDeleteColumn.columnName} = ${table.logicDeleteColumn.logicDeleteValueString}, + #elseif($column.logicDeleteStrategy == 'id_fill') + ${table.logicDeleteColumn.columnName} = ${pk.columnName}, + #end #end #end diff --git a/fastmybatis-core/src/main/resources/fastmybatis/tpl/mysql.vm b/fastmybatis-core/src/main/resources/fastmybatis/tpl/mysql.vm index 6f103f5..91c499e 100644 --- a/fastmybatis-core/src/main/resources/fastmybatis/tpl/mysql.vm +++ b/fastmybatis-core/src/main/resources/fastmybatis/tpl/mysql.vm @@ -408,10 +408,12 @@ #foreach($column in $columns) #if(${column.isPk}) - #elseif($column.logicDeleteStrategy == 'fixed_value') - ${table.logicDeleteColumn.columnName} = ${table.logicDeleteColumn.logicDeleteValueString}, - #elseif($column.logicDeleteStrategy == 'id_fill') - ${table.logicDeleteColumn.columnName} = ${pk.columnName}, + #elseif(${column.isLogicDelete}) + #if($column.logicDeleteStrategy == 'fixed_value') + ${table.logicDeleteColumn.columnName} = ${table.logicDeleteColumn.logicDeleteValueString}, + #elseif($column.logicDeleteStrategy == 'id_fill') + ${table.logicDeleteColumn.columnName} = ${pk.columnName}, + #end #end #end @@ -435,10 +437,12 @@ #foreach($column in $columns) #if(${column.isPk}) - #elseif($column.logicDeleteStrategy == 'fixed_value') - ${table.logicDeleteColumn.columnName} = ${table.logicDeleteColumn.logicDeleteValueString}, - #elseif($column.logicDeleteStrategy == 'id_fill') - ${table.logicDeleteColumn.columnName} = ${pk.columnName}, + #elseif(${column.isLogicDelete}) + #if($column.logicDeleteStrategy == 'fixed_value') + ${table.logicDeleteColumn.columnName} = ${table.logicDeleteColumn.logicDeleteValueString}, + #elseif($column.logicDeleteStrategy == 'id_fill') + ${table.logicDeleteColumn.columnName} = ${pk.columnName}, + #end #end #end @@ -462,10 +466,12 @@ #foreach($column in $columns) #if(${column.isPk}) - #elseif($column.logicDeleteStrategy == 'fixed_value') - ${table.logicDeleteColumn.columnName} = ${table.logicDeleteColumn.logicDeleteValueString}, - #elseif($column.logicDeleteStrategy == 'id_fill') - ${table.logicDeleteColumn.columnName} = ${pk.columnName}, + #elseif(${column.isLogicDelete}) + #if($column.logicDeleteStrategy == 'fixed_value') + ${table.logicDeleteColumn.columnName} = ${table.logicDeleteColumn.logicDeleteValueString}, + #elseif($column.logicDeleteStrategy == 'id_fill') + ${table.logicDeleteColumn.columnName} = ${pk.columnName}, + #end #end #end diff --git a/fastmybatis-core/src/main/resources/fastmybatis/tpl/oracle.vm b/fastmybatis-core/src/main/resources/fastmybatis/tpl/oracle.vm index 76ea302..b57991f 100644 --- a/fastmybatis-core/src/main/resources/fastmybatis/tpl/oracle.vm +++ b/fastmybatis-core/src/main/resources/fastmybatis/tpl/oracle.vm @@ -438,10 +438,12 @@ #foreach($column in $columns) #if(${column.isPk}) - #elseif($column.logicDeleteStrategy == 'fixed_value') - ${table.logicDeleteColumn.columnName} = ${table.logicDeleteColumn.logicDeleteValueString}, - #elseif($column.logicDeleteStrategy == 'id_fill') - ${table.logicDeleteColumn.columnName} = ${pk.columnName}, + #elseif(${column.isLogicDelete}) + #if($column.logicDeleteStrategy == 'fixed_value') + ${table.logicDeleteColumn.columnName} = ${table.logicDeleteColumn.logicDeleteValueString}, + #elseif($column.logicDeleteStrategy == 'id_fill') + ${table.logicDeleteColumn.columnName} = ${pk.columnName}, + #end #end #end @@ -465,10 +467,12 @@ #foreach($column in $columns) #if(${column.isPk}) - #elseif($column.logicDeleteStrategy == 'fixed_value') - ${table.logicDeleteColumn.columnName} = ${table.logicDeleteColumn.logicDeleteValueString}, - #elseif($column.logicDeleteStrategy == 'id_fill') - ${table.logicDeleteColumn.columnName} = ${pk.columnName}, + #elseif(${column.isLogicDelete}) + #if($column.logicDeleteStrategy == 'fixed_value') + ${table.logicDeleteColumn.columnName} = ${table.logicDeleteColumn.logicDeleteValueString}, + #elseif($column.logicDeleteStrategy == 'id_fill') + ${table.logicDeleteColumn.columnName} = ${pk.columnName}, + #end #end #end @@ -492,10 +496,12 @@ #foreach($column in $columns) #if(${column.isPk}) - #elseif($column.logicDeleteStrategy == 'fixed_value') - ${table.logicDeleteColumn.columnName} = ${table.logicDeleteColumn.logicDeleteValueString}, - #elseif($column.logicDeleteStrategy == 'id_fill') - ${table.logicDeleteColumn.columnName} = ${pk.columnName}, + #elseif(${column.isLogicDelete}) + #if($column.logicDeleteStrategy == 'fixed_value') + ${table.logicDeleteColumn.columnName} = ${table.logicDeleteColumn.logicDeleteValueString}, + #elseif($column.logicDeleteStrategy == 'id_fill') + ${table.logicDeleteColumn.columnName} = ${pk.columnName}, + #end #end #end diff --git a/fastmybatis-core/src/main/resources/fastmybatis/tpl/postgresql.vm b/fastmybatis-core/src/main/resources/fastmybatis/tpl/postgresql.vm index 5b0b576..39333f7 100644 --- a/fastmybatis-core/src/main/resources/fastmybatis/tpl/postgresql.vm +++ b/fastmybatis-core/src/main/resources/fastmybatis/tpl/postgresql.vm @@ -389,10 +389,12 @@ #foreach($column in $columns) #if(${column.isPk}) - #elseif($column.logicDeleteStrategy == 'fixed_value') - ${table.logicDeleteColumn.columnName} = ${table.logicDeleteColumn.logicDeleteValueString}, - #elseif($column.logicDeleteStrategy == 'id_fill') - ${table.logicDeleteColumn.columnName} = ${pk.columnName}, + #elseif(${column.isLogicDelete}) + #if($column.logicDeleteStrategy == 'fixed_value') + ${table.logicDeleteColumn.columnName} = ${table.logicDeleteColumn.logicDeleteValueString}, + #elseif($column.logicDeleteStrategy == 'id_fill') + ${table.logicDeleteColumn.columnName} = ${pk.columnName}, + #end #end #end @@ -416,10 +418,12 @@ #foreach($column in $columns) #if(${column.isPk}) - #elseif($column.logicDeleteStrategy == 'fixed_value') - ${table.logicDeleteColumn.columnName} = ${table.logicDeleteColumn.logicDeleteValueString}, - #elseif($column.logicDeleteStrategy == 'id_fill') - ${table.logicDeleteColumn.columnName} = ${pk.columnName}, + #elseif(${column.isLogicDelete}) + #if($column.logicDeleteStrategy == 'fixed_value') + ${table.logicDeleteColumn.columnName} = ${table.logicDeleteColumn.logicDeleteValueString}, + #elseif($column.logicDeleteStrategy == 'id_fill') + ${table.logicDeleteColumn.columnName} = ${pk.columnName}, + #end #end #end @@ -443,10 +447,12 @@ #foreach($column in $columns) #if(${column.isPk}) - #elseif($column.logicDeleteStrategy == 'fixed_value') - ${table.logicDeleteColumn.columnName} = ${table.logicDeleteColumn.logicDeleteValueString}, - #elseif($column.logicDeleteStrategy == 'id_fill') - ${table.logicDeleteColumn.columnName} = ${pk.columnName}, + #elseif(${column.isLogicDelete}) + #if($column.logicDeleteStrategy == 'fixed_value') + ${table.logicDeleteColumn.columnName} = ${table.logicDeleteColumn.logicDeleteValueString}, + #elseif($column.logicDeleteStrategy == 'id_fill') + ${table.logicDeleteColumn.columnName} = ${pk.columnName}, + #end #end #end diff --git a/fastmybatis-core/src/main/resources/fastmybatis/tpl/sqlite.vm b/fastmybatis-core/src/main/resources/fastmybatis/tpl/sqlite.vm index 727c4e3..ab5d7fa 100644 --- a/fastmybatis-core/src/main/resources/fastmybatis/tpl/sqlite.vm +++ b/fastmybatis-core/src/main/resources/fastmybatis/tpl/sqlite.vm @@ -408,10 +408,12 @@ #foreach($column in $columns) #if(${column.isPk}) - #elseif($column.logicDeleteStrategy == 'fixed_value') - ${table.logicDeleteColumn.columnName} = ${table.logicDeleteColumn.logicDeleteValueString}, - #elseif($column.logicDeleteStrategy == 'id_fill') - ${table.logicDeleteColumn.columnName} = ${pk.columnName}, + #elseif(${column.isLogicDelete}) + #if($column.logicDeleteStrategy == 'fixed_value') + ${table.logicDeleteColumn.columnName} = ${table.logicDeleteColumn.logicDeleteValueString}, + #elseif($column.logicDeleteStrategy == 'id_fill') + ${table.logicDeleteColumn.columnName} = ${pk.columnName}, + #end #end #end @@ -435,10 +437,12 @@ #foreach($column in $columns) #if(${column.isPk}) - #elseif($column.logicDeleteStrategy == 'fixed_value') - ${table.logicDeleteColumn.columnName} = ${table.logicDeleteColumn.logicDeleteValueString}, - #elseif($column.logicDeleteStrategy == 'id_fill') - ${table.logicDeleteColumn.columnName} = ${pk.columnName}, + #elseif(${column.isLogicDelete}) + #if($column.logicDeleteStrategy == 'fixed_value') + ${table.logicDeleteColumn.columnName} = ${table.logicDeleteColumn.logicDeleteValueString}, + #elseif($column.logicDeleteStrategy == 'id_fill') + ${table.logicDeleteColumn.columnName} = ${pk.columnName}, + #end #end #end @@ -462,10 +466,12 @@ #foreach($column in $columns) #if(${column.isPk}) - #elseif($column.logicDeleteStrategy == 'fixed_value') - ${table.logicDeleteColumn.columnName} = ${table.logicDeleteColumn.logicDeleteValueString}, - #elseif($column.logicDeleteStrategy == 'id_fill') - ${table.logicDeleteColumn.columnName} = ${pk.columnName}, + #elseif(${column.isLogicDelete}) + #if($column.logicDeleteStrategy == 'fixed_value') + ${table.logicDeleteColumn.columnName} = ${table.logicDeleteColumn.logicDeleteValueString}, + #elseif($column.logicDeleteStrategy == 'id_fill') + ${table.logicDeleteColumn.columnName} = ${pk.columnName}, + #end #end #end diff --git a/fastmybatis-demo/fastmybatis-demo-springboot/src/main/java/com/myapp/entity/TUser.java b/fastmybatis-demo/fastmybatis-demo-springboot/src/main/java/com/myapp/entity/TUser.java index a3df6de..c18f257 100644 --- a/fastmybatis-demo/fastmybatis-demo-springboot/src/main/java/com/myapp/entity/TUser.java +++ b/fastmybatis-demo/fastmybatis-demo-springboot/src/main/java/com/myapp/entity/TUser.java @@ -4,7 +4,7 @@ import com.gitee.fastmybatis.annotation.Column; import com.gitee.fastmybatis.annotation.Pk; import com.gitee.fastmybatis.annotation.PkStrategy; import com.gitee.fastmybatis.annotation.Table; -import com.gitee.fastmybatis.core.ext.code.generator.LogicDeleteStrategy; +import com.gitee.fastmybatis.annotation.LogicDeleteStrategy; import java.math.BigDecimal; import java.util.Date; @@ -29,7 +29,7 @@ public class TUser { private Byte state; /** 是否删除, 数据库字段:isdel */ - @Column(logicDeleteStrategy = LogicDeleteStrategy.ID_FILL) + @Column(logicDelete = true,logicDeleteStrategy = LogicDeleteStrategy.ID_FILL) private Boolean isdel; /** 备注, 数据库字段:remark */ -- Gitee