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 = ?
相关推荐
qq_12498707531 小时前
基于SSM的动物保护系统的设计与实现(源码+论文+部署+安装)
java·数据库·spring boot·毕业设计·ssm·计算机毕业设计
Coder_Boy_1 小时前
基于SpringAI的在线考试系统-考试系统开发流程案例
java·数据库·人工智能·spring boot·后端
2301_818732061 小时前
前端调用控制层接口,进不去,报错415,类型不匹配
java·spring boot·spring·tomcat·intellij-idea
掘金者阿豪2 小时前
关系数据库迁移的“暗礁”:金仓数据库如何规避数据完整性与一致性风险
后端
冬奇Lab2 小时前
一天一个开源项目(第17篇):ViMax - 多智能体视频生成框架,导演、编剧、制片人全包
开源·音视频开发
ServBay2 小时前
一个下午,一台电脑,终结你 90% 的 Symfony 重复劳动
后端·php·symfony
sino爱学习3 小时前
高性能线程池实践:Dubbo EagerThreadPool 设计与应用
java·后端
颜酱3 小时前
从二叉树到衍生结构:5种高频树结构原理+解析
javascript·后端·算法
掘金者阿豪3 小时前
UUID的隐形成本:一个让数据库“慢下来”的陷阱
后端
用户084465256373 小时前
Docker 部署 MongoDB Atlas 到服务端
后端