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

https://github.com/baomidou/mybatis-plus/issues/6264
This commit is contained in:
nieqiurong 2024-06-20 11:41:55 +08:00
parent 423d43425f
commit 1cfc0596e3
4 changed files with 81 additions and 3 deletions

View File

@ -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())) {

View File

@ -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;
}

View File

@ -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> {
}

View File

@ -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))");
}
}