目前虽然支持全局设置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;