simplestjpa v1.2.0如何优雅实现多租户

2023年 8月 9日 66.0k 0

开始使用

simplest详细文档

simplest-jpa 使用多租户需要 2 个步骤:

  • 在属性中配置对应租户表和列。
  • 配置 TenantFactory 注入租户数据源
  • TenantFactory 是用于生产租户 ID 的,或者说是用于获取当前租户 ID 的。

    配置

    属性文件

    jpa:
      properties:
        hibernate:
          session_factory:
            statement_inspector: cn.soboys.simplestjpa.interceptor.TenantInterceptor #配置指定租户拦截器
    # 需进行租户解析的租户表
    tenant:
      tables:
        - cms_category
      tenant-id-column: tenant_id
      enableTenant: true
    

    自定义租户数据

    /**
     * @author 公众号 程序员三时
     * @version 1.0
     * @date 2023/7/30 22:15
     * @webSite https://github.com/coder-amiao
     */
    @Configuration
    public class TenantConfig implements TenantFactory {
    
        @Override
        public String getTenantId() {
            return "8";
        }
    }
    

    ::: tip
    如果getTenantId()返回空或者null会自动过滤。
    :::

    忽略租户条件

    在某些场景下,在增删改查等操作,我们可能需要忽略租户条件, 此时可以设置CustomTenant
    withoutTenantCondition

    @Test
    void countByExample() {
        CustomTenant.withoutTenantCondition=true; //自定义不设置租户拦截
        Category category = new Category();
        category.setTitle("测试");
        long count = categoryService.count(Example.of(category));
        log.info("条件count{}", count);
    }
    

    示列

    删除、修改和查询表在指定属性配置表中。都会带上租户的条件。

    比如根据 ID 删除,那么执行的 SQL 如下:

    DELETE FROM tb_article where id = ? and tenant_id = ?
    

    相关文章

    JavaScript2024新功能:Object.groupBy、正则表达式v标志
    PHP trim 函数对多字节字符的使用和限制
    新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
    使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
    为React 19做准备:WordPress 6.6用户指南
    如何删除WordPress中的所有评论

    发布评论