目前虽然支持全局设置schema或代码生成的时候设置到实体类,但是这样不灵活 建议支持变量,不论是实体类还是xml都以变量替换固定的schema; 原生mybatis是支持这个功能的(支持在xml中用变量替换schema),mybatis-genrator也是支持变量的


用mysql可能对schema不敏感,但是其他功能完善的数据库比如oracle,postgresql都完美支持schema,是一个非常重要的功能

Comment From: qmdx

@TableName 中指定 schema

Comment From: Loongphy

author想要的是多租户schema切换,目前只有行级 虽然没有直接的支持,但可以利用动态表名实现

@Configuration
public class DynamicSchema {

    @Value("${tenant.schema-prefix}")
    private String tenantSchemaPrefix;

    @Bean
    public MybatisPlusInterceptor schemaInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        DynamicTableNameInnerInterceptor dynamicTableNameInnerInterceptor = new DynamicTableNameInnerInterceptor();
        dynamicTableNameInnerInterceptor.setTableNameHandler((sql, tableName) -> {
            // 获取参数方法
            Long tenantId = TenantContextHolder.getTenantId();
            return tenantSchemaPrefix + tenantId + tableName;
        });
        interceptor.addInnerInterceptor(dynamicTableNameInnerInterceptor);
        return interceptor;
    }

}

Comment From: lvhejin

@TableName 中指定 schema

你好:

开发环境 和 测试环境 的schema不一样,需要从配置文件读取,例如: @TableName(value = "openapi_user",schema = "${pgsql_schema_openapi}") public class User implements Serializable {

目前不支持,用MybatisPlusGenerator生成代码时也不支持指定schema的值

Comment From: lvhejin

author想要的是多租户schema切换,目前只有行级 虽然没有直接的支持,但可以利用动态表名实现

```java @Configuration public class DynamicSchema {

@Value("${tenant.schema-prefix}")
private String tenantSchemaPrefix;

@Bean
public MybatisPlusInterceptor schemaInterceptor() {
    MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
    DynamicTableNameInnerInterceptor dynamicTableNameInnerInterceptor = new DynamicTableNameInnerInterceptor();
    dynamicTableNameInnerInterceptor.setTableNameHandler((sql, tableName) -> {
        // 获取参数方法
        Long tenantId = TenantContextHolder.getTenantId();
        return tenantSchemaPrefix + tenantId + tableName;
    });
    interceptor.addInnerInterceptor(dynamicTableNameInnerInterceptor);
    return interceptor;
}

} ```

你好,pgsql库,同一个数据库,有三个schema分成存放着不同的表,怎么动态获取配置文件里的schema值?

Comment From: Loongphy

java @Value("${tenant.schema-prefix}") private String tenantSchemaPrefix;

使用 @Value 注解读取配置文件,然后利用动态表名拼接 schema

    @Value("${tenant.schema-prefix}")
    private String tenantSchemaPrefix;