Explorar o código

DbConfig 加入 schema 属性,TableName 注解移除 prefix 属性,加入 schema 和 keepGlobalPrefix 属性

miemie %!s(int64=6) %!d(string=hai) anos
pai
achega
45ba758e80

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

@@ -34,18 +34,19 @@ public @interface TableName {
     String value() default "";
 
     /**
-     * 如果您需要为表指定前缀,请在此处指定,默认无前缀
-     * <p>
-     * 1、Mysql 等数据库中该前缀应指向表所在的数据库
-     * 2、PostgreSQL 中应指向表的 Schema
-     *
-     * @return 表前缀
+     * 是否保持使用全局的 tablePrefix 的值
+     * <p> 只生效于 既设置了全局的 tablePrefix 也设置了上面 value 的值 </p>
+     * <li> 如果是 false , 全局的 tablePrefix 不生效 </li>
      */
-    String prefix() default "";
+    boolean keepGlobalPrefix() default false;
+
+    /**
+     * schema
+     */
+    String schema() default "";
 
     /**
      * 实体映射结果集
      */
     String resultMap() default "";
-
 }

+ 4 - 0
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/config/GlobalConfig.java

@@ -116,6 +116,10 @@ public class GlobalConfig implements Serializable {
          * 表名前缀
          */
         private String tablePrefix;
+        /**
+         * schema
+         */
+        private String schema;
         /**
          * 表名、是否使用下划线命名(默认 true:默认数据库表下划线命名)
          */

+ 15 - 6
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/toolkit/TableInfoHelper.java

@@ -163,16 +163,21 @@ public class TableInfoHelper {
         TableName table = clazz.getAnnotation(TableName.class);
 
         String tableName = clazz.getSimpleName();
-        String prefix = null;
+        String tablePrefix = dbConfig.getTablePrefix();
+        String schema = dbConfig.getSchema();
+        boolean tablePrefixEffect = true;
 
         if (table != null) {
             if (StringUtils.isNotEmpty(table.value())) {
                 tableName = table.value();
+                if (StringUtils.isNotEmpty(tablePrefix) && !table.keepGlobalPrefix()) {
+                    tablePrefixEffect = false;
+                }
             } else {
                 tableName = initTableNameWithDbConfig(tableName, dbConfig);
             }
-            if (StringUtils.isNotEmpty(table.prefix())) {
-                prefix = table.prefix();
+            if (StringUtils.isNotEmpty(table.schema())) {
+                schema = table.schema();
             }
             /* 表结果集映射 */
             if (StringUtils.isNotEmpty(table.resultMap())) {
@@ -182,11 +187,15 @@ public class TableInfoHelper {
             tableName = initTableNameWithDbConfig(tableName, dbConfig);
         }
 
-        if (StringUtils.isEmpty(prefix)) {
-            prefix = dbConfig.getTablePrefix();
+        String targetTableName = tableName;
+        if (StringUtils.isNotEmpty(tablePrefix) && tablePrefixEffect) {
+            targetTableName = tablePrefix + targetTableName;
+        }
+        if (StringUtils.isNotEmpty(schema)) {
+            targetTableName = schema + StringPool.DOT + targetTableName;
         }
 
-        tableInfo.setTableName(StringUtils.isEmpty(prefix) ? tableName : (prefix + StringPool.DOT + tableName));
+        tableInfo.setTableName(targetTableName);
 
         /* 开启了自定义 KEY 生成器 */
         if (null != dbConfig.getKeyGenerator()) {