瀏覽代碼

支持tableName与schema属性占位符配置.

https://github.com/baomidou/mybatis-plus/issues/6264
nieqiurong 11 月之前
父節點
當前提交
1cfc0596e3

+ 4 - 3
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/metadata/TableInfoHelper.java

@@ -44,6 +44,7 @@ import org.apache.ibatis.logging.LogFactory;
 import org.apache.ibatis.mapping.MappedStatement;
 import org.apache.ibatis.mapping.MappedStatement;
 import org.apache.ibatis.mapping.ResultMap;
 import org.apache.ibatis.mapping.ResultMap;
 import org.apache.ibatis.mapping.SqlCommandType;
 import org.apache.ibatis.mapping.SqlCommandType;
+import org.apache.ibatis.parsing.PropertyParser;
 import org.apache.ibatis.reflection.Reflector;
 import org.apache.ibatis.reflection.Reflector;
 import org.apache.ibatis.session.Configuration;
 import org.apache.ibatis.session.Configuration;
 import org.apache.ibatis.type.SimpleTypeRegistry;
 import org.apache.ibatis.type.SimpleTypeRegistry;
@@ -223,7 +224,7 @@ public class TableInfoHelper {
         GlobalConfig.DbConfig dbConfig = globalConfig.getDbConfig();
         GlobalConfig.DbConfig dbConfig = globalConfig.getDbConfig();
         AnnotationHandler annotationHandler = globalConfig.getAnnotationHandler();
         AnnotationHandler annotationHandler = globalConfig.getAnnotationHandler();
         TableName table = annotationHandler.getAnnotation(clazz, TableName.class);
         TableName table = annotationHandler.getAnnotation(clazz, TableName.class);
-
+        Configuration configuration = tableInfo.getConfiguration();
         String tableName = clazz.getSimpleName();
         String tableName = clazz.getSimpleName();
         String tablePrefix = dbConfig.getTablePrefix();
         String tablePrefix = dbConfig.getTablePrefix();
         String schema = dbConfig.getSchema();
         String schema = dbConfig.getSchema();
@@ -232,7 +233,7 @@ public class TableInfoHelper {
 
 
         if (table != null) {
         if (table != null) {
             if (StringUtils.isNotBlank(table.value())) {
             if (StringUtils.isNotBlank(table.value())) {
-                tableName = table.value();
+                tableName = PropertyParser.parse(table.value(), configuration.getVariables());
                 if (StringUtils.isNotBlank(tablePrefix) && !table.keepGlobalPrefix()) {
                 if (StringUtils.isNotBlank(tablePrefix) && !table.keepGlobalPrefix()) {
                     tablePrefixEffect = false;
                     tablePrefixEffect = false;
                 }
                 }
@@ -240,7 +241,7 @@ public class TableInfoHelper {
                 tableName = initTableNameWithDbConfig(tableName, dbConfig);
                 tableName = initTableNameWithDbConfig(tableName, dbConfig);
             }
             }
             if (StringUtils.isNotBlank(table.schema())) {
             if (StringUtils.isNotBlank(table.schema())) {
-                schema = table.schema();
+                schema = PropertyParser.parse(table.schema(), configuration.getVariables());
             }
             }
             /* 表结果集映射 */
             /* 表结果集映射 */
             if (StringUtils.isNotBlank(table.resultMap())) {
             if (StringUtils.isNotBlank(table.resultMap())) {

+ 17 - 0
mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/scheam/SchemaEntity.java

@@ -0,0 +1,17 @@
+package com.baomidou.mybatisplus.test.scheam;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+/**
+ * @author nieqiurong
+ */
+@Data
+@TableName(value = "${my.tableName}", schema = "${my.schema}")
+public class SchemaEntity {
+
+    private Long id;
+
+    private String name;
+
+}

+ 12 - 0
mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/scheam/SchemaEntityMapper.java

@@ -0,0 +1,12 @@
+package com.baomidou.mybatisplus.test.scheam;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * @author nieqiurong
+ */
+@Mapper
+public interface SchemaEntityMapper extends BaseMapper<SchemaEntity> {
+
+}

+ 48 - 0
mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/scheam/SchemaEntityTest.java

@@ -0,0 +1,48 @@
+package com.baomidou.mybatisplus.test.scheam;
+
+import com.baomidou.mybatisplus.test.BaseDbTest;
+import org.apache.ibatis.session.Configuration;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Properties;
+import java.util.function.Consumer;
+
+/**
+ * @author nieqiurong
+ */
+public class SchemaEntityTest extends BaseDbTest<SchemaEntityMapper> {
+
+    @Test
+    void test() {
+        doTest(mapper -> {
+            SchemaEntity schemaEntity = mapper.selectById(1);
+            Assertions.assertNotNull(schemaEntity);
+        });
+    }
+
+    @Override
+    protected Consumer<Configuration> consumer() {
+        return configuration -> {
+            Properties properties = new Properties();
+            properties.put("my.schema", "public");
+            properties.put("my.tableName", "SCHEMA_ENTITY");
+            configuration.setVariables(properties);
+        };
+    }
+
+    @Override
+    protected String tableDataSql() {
+        return "insert into SCHEMA_ENTITY(id,name) values(1,'1'),(2,'2');";
+    }
+
+    @Override
+    protected List<String> tableSql() {
+        return Arrays.asList("drop table if exists SCHEMA_ENTITY", "CREATE TABLE IF NOT EXISTS SCHEMA_ENTITY (" +
+            "id BIGINT NOT NULL," +
+            "name VARCHAR(30) NULL DEFAULT NULL," +
+            "PRIMARY KEY (id))");
+    }
+}