simplest-jpa v1.2.0如何优雅实现多租户

开始使用

simplest详细文档

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

  1. 在属性中配置对应租户表和列。
  2. 配置 TenantFactory 注入租户数据源

TenantFactory 是用于生产租户 ID 的,或者说是用于获取当前租户 ID 的。

配置

属性文件

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

自定义租户数据

java 复制代码
/**
 * @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

java 复制代码
@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 如下:

sql 复制代码
DELETE FROM tb_article where id = ? and tenant_id = ?
相关推荐
IT_陈寒42 分钟前
被Vite的动态导入坑了一整天,原来问题出在这
前端·人工智能·后端
世人万千丶43 分钟前
鸿蒙PC问题解决:窗口拖动与拉伸时页面布局瞬间错乱、回弹后恢复
学习·华为·开源·harmonyos·鸿蒙·鸿蒙系统
码事漫谈1 小时前
你的 AI 编程助手,为什么总在“乱来”?
后端
程序员老申1 小时前
我受够了在项目、域名、服务器、SSL 之间来回切换,于是开源了 Solo Workspace
程序员·开源
星浩AI1 小时前
接手 20 万行代码从哪读起?Understand-Anything 把仓库变成可探索的知识图谱
后端·github·claude
浮芷.2 小时前
鸿蒙PC端 TTS 语音播放失败问题详解:从错误码到解决方案
华为·开源·harmonyos·鸿蒙·鸿蒙系统
提子拌饭1332 小时前
模态窗鸿蒙PC Electron框架实现技术详解 - 饮料含糖量应用案例分析
前端·javascript·华为·electron·前端框架·开源·鸿蒙
浮芷.3 小时前
鸿蒙PC端 TTS 网络连接错误问题详解:在线/离线模式切换与网络状态管理
网络·华为·开源·harmonyos·鸿蒙·鸿蒙系统
2601_955781984 小时前
私有化本地 AI,Windows 平台 OpenClaw 功能详解与配置
人工智能·开源·github·open claw