Преглед изворни кода

字段全局设置前后缀 ing

miemie пре 6 година
родитељ
комит
3c30c38eab

+ 6 - 0
mybatis-plus-annotation/src/main/java/com/baomidou/mybatisplus/annotation/TableField.java

@@ -79,4 +79,10 @@ public @interface TableField {
      */
     boolean select() default true;
 
+    /**
+     * 是否保持使用全局的 columnPrefix 以及 columnPrefix 的值
+     * <p> 只生效于 既设置了全局的 columnPrefix 或者 columnSuffix 也设置了上面 {@link #value()} 的值 </p>
+     * <li> 如果是 false , 全局的 columnPrefix 以及 columnSuffix 不生效 </li>
+     */
+    boolean keepGlobalPrefixSuffix() default false;
 }

+ 7 - 5
mybatis-plus-annotation/src/main/java/com/baomidou/mybatisplus/annotation/TableId.java

@@ -15,11 +15,7 @@
  */
 package com.baomidou.mybatisplus.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;
+import java.lang.annotation.*;
 
 /**
  * 表主键标识
@@ -43,4 +39,10 @@ public @interface TableId {
      */
     IdType type() default IdType.NONE;
 
+    /**
+     * 是否保持使用全局的 columnPrefix 以及 columnPrefix 的值
+     * <p> 只生效于 既设置了全局的 columnPrefix 或者 columnSuffix 也设置了上面 {@link #value()} 的值 </p>
+     * <li> 如果是 false , 全局的 columnPrefix 以及 columnSuffix 不生效 </li>
+     */
+    boolean keepGlobalPrefixSuffix() default false;
 }

+ 1 - 1
mybatis-plus-annotation/src/main/java/com/baomidou/mybatisplus/annotation/TableName.java

@@ -35,7 +35,7 @@ public @interface TableName {
 
     /**
      * 是否保持使用全局的 tablePrefix 的值
-     * <p> 只生效于 既设置了全局的 tablePrefix 也设置了上面 value 的值 </p>
+     * <p> 只生效于 既设置了全局的 tablePrefix 也设置了上面 {@link #value()} 的值 </p>
      * <li> 如果是 false , 全局的 tablePrefix 不生效 </li>
      */
     boolean keepGlobalPrefix() default false;

+ 17 - 1
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/config/GlobalConfig.java

@@ -49,6 +49,8 @@ public class GlobalConfig implements Serializable {
     private boolean banner = true;
     /**
      * 缓存 Sql 解析初始化
+     *
+     * @deprecated 不再需要这个属性, 现在是全局开启状态
      */
     @Deprecated
     private boolean sqlParserCache = false;
@@ -102,7 +104,10 @@ public class GlobalConfig implements Serializable {
 
         /**
          * 数据库类型
+         *
+         * @deprecated 不再需要, mp不应该也不需要关心数据库类型
          */
+        @Deprecated
         private DbType dbType = DbType.OTHER;
         /**
          * 主键类型(默认 ID_WORKER)
@@ -116,20 +121,31 @@ public class GlobalConfig implements Serializable {
          * schema
          */
         private String schema;
+        /**
+         * 字段前缀
+         */
+        private String columnPrefix;
+        /**
+         * 字段后缀
+         */
+        private String columnSuffix;
         /**
          * 表名、是否使用下划线命名(默认 true:默认数据库表下划线命名)
          */
         private boolean tableUnderline = true;
         /**
          * String 类型字段 LIKE
+         *
+         * @deprecated 这个属性没什么意思
          */
+        @Deprecated
         private boolean columnLike = false;
         /**
          * 大写命名
          */
         private boolean capitalMode = false;
         /**
-         * 表关键词 key 生成器
+         * 表主键生成器
          */
         private IKeyGenerator keyGenerator;
         /**

+ 13 - 5
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/metadata/TableFieldInfo.java

@@ -21,7 +21,6 @@ import com.baomidou.mybatisplus.core.toolkit.Constants;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.core.toolkit.TableInfoHelper;
 import com.baomidou.mybatisplus.core.toolkit.sql.SqlScriptUtils;
-import com.baomidou.mybatisplus.core.toolkit.sql.SqlUtils;
 import lombok.AccessLevel;
 import lombok.EqualsAndHashCode;
 import lombok.Getter;
@@ -175,6 +174,16 @@ public class TableFieldInfo implements Constants {
             /* 开启字段全大写申明 */
             column = column.toUpperCase();
         }
+        String columnPrefix = dbConfig.getColumnPrefix();
+        String columnSuffix = dbConfig.getColumnSuffix();
+
+        if (StringUtils.isNotEmpty(columnPrefix)) {
+            column = columnPrefix + column;
+        }
+        if (StringUtils.isNotEmpty(columnSuffix)) {
+            column += columnSuffix;
+        }
+
         this.column = column;
         this.related = TableInfoHelper.checkRelated(tableInfo.isUnderCamel(), this.property, this.column);
     }
@@ -226,16 +235,15 @@ public class TableFieldInfo implements Constants {
     /**
      * 获取 select sql 片段
      *
-     * @param dbType 数据库类型
      * @return sql 片段
      */
-    public String getSqlSelect(DbType dbType) {
+    public String getSqlSelect() {
         if (sqlSelect != null) {
             return sqlSelect;
         }
-        sqlSelect = SqlUtils.sqlWordConvert(dbType, getColumn(), true);
+        sqlSelect = column;
         if (related) {
-            sqlSelect += (" AS " + SqlUtils.sqlWordConvert(dbType, getProperty(), false));
+            sqlSelect += (" AS " + property);
         }
         return sqlSelect;
     }

+ 3 - 11
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/metadata/TableInfo.java

@@ -15,7 +15,6 @@
  */
 package com.baomidou.mybatisplus.core.metadata;
 
-import com.baomidou.mybatisplus.annotation.DbType;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.KeySequence;
 import com.baomidou.mybatisplus.core.MybatisConfiguration;
@@ -24,7 +23,6 @@ import com.baomidou.mybatisplus.core.toolkit.Constants;
 import com.baomidou.mybatisplus.core.toolkit.ExceptionUtils;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.core.toolkit.sql.SqlScriptUtils;
-import com.baomidou.mybatisplus.core.toolkit.sql.SqlUtils;
 import lombok.AccessLevel;
 import lombok.Data;
 import lombok.Getter;
@@ -51,10 +49,6 @@ public class TableInfo implements Constants {
      * 表主键ID 类型
      */
     private IdType idType = IdType.NONE;
-    /**
-     * 数据库类型
-     */
-    private DbType dbType;
     /**
      * 表名称
      */
@@ -155,11 +149,9 @@ public class TableInfo implements Constants {
             return sqlSelect;
         }
         if (StringUtils.isNotEmpty(keyProperty)) {
+            sqlSelect = keyColumn;
             if (keyRelated) {
-                sqlSelect = SqlUtils.sqlWordConvert(dbType, keyColumn, true) + " AS " +
-                    SqlUtils.sqlWordConvert(dbType, keyProperty, false);
-            } else {
-                sqlSelect = SqlUtils.sqlWordConvert(dbType, keyColumn, true);
+                sqlSelect += (" AS " + keyProperty);
             }
         } else {
             sqlSelect = EMPTY;
@@ -189,7 +181,7 @@ public class TableInfo implements Constants {
     public String chooseSelect(Predicate<TableFieldInfo> predicate) {
         String sqlSelect = getKeySqlSelect();
         String fieldsSqlSelect = fieldList.stream().filter(predicate)
-            .map(i -> i.getSqlSelect(dbType)).collect(joining(COMMA));
+            .map(TableFieldInfo::getSqlSelect).collect(joining(COMMA));
         if (StringUtils.isNotEmpty(sqlSelect) && StringUtils.isNotEmpty(fieldsSqlSelect)) {
             return sqlSelect + COMMA + fieldsSqlSelect;
         } else if (StringUtils.isNotEmpty(fieldsSqlSelect)) {

+ 1 - 2
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/toolkit/LambdaUtils.java

@@ -110,9 +110,8 @@ public final class LambdaUtils {
         }
 
         info.getFieldList().forEach(i ->
-            map.put(formatKey(i.getProperty()), new ColumnCache(i.getColumn(), i.getSqlSelect(info.getDbType())))
+            map.put(formatKey(i.getProperty()), new ColumnCache(i.getColumn(), i.getSqlSelect()))
         );
         return map;
     }
-
 }

+ 23 - 2
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/toolkit/TableInfoHelper.java

@@ -100,6 +100,7 @@ public class TableInfoHelper {
      *
      * @return 数据库表反射信息集合
      */
+    @SuppressWarnings("unused")
     public static List<TableInfo> getTableInfos() {
         return new ArrayList<>(TABLE_INFO_CACHE.values());
     }
@@ -158,8 +159,6 @@ public class TableInfoHelper {
     private static void initTableName(Class<?> clazz, GlobalConfig globalConfig, TableInfo tableInfo) {
         /* 数据库全局配置 */
         GlobalConfig.DbConfig dbConfig = globalConfig.getDbConfig();
-        /* 设置数据库类型 */
-        tableInfo.setDbType(dbConfig.getDbType());
         TableName table = clazz.getAnnotation(TableName.class);
 
         String tableName = clazz.getSimpleName();
@@ -400,8 +399,10 @@ public class TableInfoHelper {
             return false;
         }
         String columnName = field.getName();
+        boolean columnNameFromTableField = false;
         if (StringUtils.isNotEmpty(tableField.value())) {
             columnName = tableField.value();
+            columnNameFromTableField = true;
         }
         /*
          * el 语法支持,可以传入多个参数以逗号分开
@@ -411,6 +412,26 @@ public class TableInfoHelper {
             el = tableField.el();
         }
         String[] columns = columnName.split(StringPool.SEMICOLON);
+
+        String columnPrefix = dbConfig.getColumnPrefix();
+        String columnSuffix = dbConfig.getColumnSuffix();
+        boolean hasPrefix = StringUtils.isNotEmpty(columnPrefix);
+        boolean hasSuffix = StringUtils.isNotEmpty(columnSuffix);
+        boolean keepPs = tableField.keepGlobalPrefixSuffix();
+
+        if ((hasPrefix || hasSuffix) && (!columnNameFromTableField || keepPs)) {
+            for (int i = 0; i < columns.length; i++) {
+                String column = columns[i];
+                if (hasPrefix) {
+                    column = columnPrefix + column;
+                }
+                if (hasSuffix) {
+                    column += columnSuffix;
+                }
+                columns[i] = column;
+            }
+        }
+
         String[] els = el.split(StringPool.SEMICOLON);
         if (columns.length == els.length) {
             for (int i = 0; i < columns.length; i++) {

+ 0 - 24
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/toolkit/sql/SqlUtils.java

@@ -15,10 +15,8 @@
  */
 package com.baomidou.mybatisplus.core.toolkit.sql;
 
-import com.baomidou.mybatisplus.annotation.DbType;
 import com.baomidou.mybatisplus.core.enums.SqlLike;
 import com.baomidou.mybatisplus.core.toolkit.StringPool;
-import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 
 /**
  * SqlUtils工具类
@@ -30,7 +28,6 @@ public class SqlUtils {
 
     private final static SqlFormatter SQL_FORMATTER = new SqlFormatter();
 
-
     /**
      * 格式sql
      */
@@ -61,25 +58,4 @@ public class SqlUtils {
                 return StringPool.PERCENT + str + StringPool.PERCENT;
         }
     }
-
-    /**
-     * 获取需要转义的SQL字段
-     *
-     * @param dbType   数据库类型
-     * @param val      值
-     * @param isColumn val 是否是数据库字段
-     */
-    public static String sqlWordConvert(DbType dbType, String val, boolean isColumn) {
-        if (dbType == DbType.POSTGRE_SQL) {
-            if (isColumn && (StringUtils.isNotColumnName(val) || val.toLowerCase().equals(val))) {
-                // 都是数据库字段的情况下
-                // 1.手动加了转义符
-                // 2.全小写之后和原值一样
-                // 都直接返回
-                return val;
-            }
-            return String.format("\"%s\"", val);
-        }
-        return val;
-    }
 }