Browse Source

feat(TableName): TableName 增加了 prefix() 方法以支持指定表前缀

hanchunlin@aliyun.com 6 years ago
parent
commit
843fa8d339

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

@@ -15,16 +15,12 @@
  */
 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.*;
 
 /**
  * 数据库表相关
  *
- * @author hubin
+ * @author hubin, hanchunlin
  * @since 2016-01-23
  */
 @Documented
@@ -37,6 +33,16 @@ public @interface TableName {
      */
     String value() default "";
 
+    /**
+     * 如果您需要为表指定前缀,请在此处指定,默认无前缀
+     * <p>
+     * 1、Mysql 等数据库中该前缀应指向表所在的数据库
+     * 2、PostgreSQL 中应指向表的 Schema
+     *
+     * @return 表前缀
+     */
+    String prefix() default "";
+
     /**
      * 实体映射结果集
      */

+ 16 - 24
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/toolkit/TableInfoHelper.java

@@ -155,40 +155,32 @@ public class TableInfoHelper {
      * @param globalConfig 全局配置
      * @param tableInfo    数据库表反射信息
      */
-    public static void initTableName(Class<?> clazz, GlobalConfig globalConfig, TableInfo tableInfo) {
+    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();
-        if (table != null && StringUtils.isNotEmpty(table.value())) {
-            tableName = table.value();
+        String prefix = null;
+
+        if (table != null) {
+            if (StringUtils.isNotEmpty(table.value())) tableName = table.value();
+            if (StringUtils.isNotEmpty(table.prefix())) prefix = table.prefix();
+            /* 表结果集映射 */
+            if (StringUtils.isNotEmpty(table.resultMap())) {
+                tableInfo.setResultMap(table.resultMap());
+            }
         } else {
             // 开启表名下划线申明
-            if (dbConfig.isTableUnderline()) {
-                tableName = StringUtils.camelToUnderline(tableName);
-            }
-            // 大写命名判断
-            if (dbConfig.isCapitalMode()) {
-                tableName = tableName.toUpperCase();
-            } else {
-                // 首字母小写
-                tableName = StringUtils.firstToLowerCase(tableName);
-            }
-            // 存在表名前缀
-            if (null != dbConfig.getTablePrefix()) {
-                tableName = dbConfig.getTablePrefix() + tableName;
-            }
+            tableName = dbConfig.isTableUnderline() ? StringUtils.camelToUnderline(tableName) :
+                // 大写命名判断
+                dbConfig.isCapitalMode() ? tableName.toUpperCase() : StringUtils.firstToLowerCase(tableName);
         }
-        tableInfo.setTableName(tableName);
 
-        /* 表结果集映射 */
-        if (table != null && StringUtils.isNotEmpty(table.resultMap())) {
-            tableInfo.setResultMap(table.resultMap());
-        }
+        if (StringUtils.isEmpty(prefix)) prefix = dbConfig.getTablePrefix();
+        tableInfo.setTableName(StringUtils.isEmpty(prefix) ? tableName : String.format("%s.%s", prefix, tableName));
 
         /* 开启了自定义 KEY 生成器 */
         if (null != dbConfig.getKeyGenerator()) {