Mybatis-plus 实现多租户业务实战

前言

今天来了解下如何使用 mybatis-plus 实现我们的多租户实战,从多租户概念引入到SpringBoot项目中的实际应用。这块也之前已经在项目中应用,将这部分功能摘取出来进行demo 演示。

一、多租户概念

1.1 云服务模式

要想了解下多租户的概念,我们需要了解下几种云服务模式,常见的有 IAAS、PAAS、SAAS 等服务。

而我们的多租户是 SAAS 服务特有的产物。SAAS 服务是部署在云端,客户可以同时使用同一套系统。

1.1.1 IAAS

含义为 Infrastructure as a server。即基础设施就是服务,意思就是把客户需要的基础设施环境搭建好后,然后开放虚拟机或硬件的租赁服务,消费者不管理或控制任何云计算基础设施,但能控制操作系统的选择、存储空间、部署的应用,也有可能获得有限制的网络组件(例如路由器、防火墙、负载均衡器等)的控制。

一般使用云服务器就是这样。

  • 优点:IAAS 的自由度、灵活度非常高,用户可以自行安装操作系统、数据库及各类软件。
  • 缺点:维护成本比较高,cpu、内存等资源跑不满可能会浪费,需要投入运维成本。

1.1.2 PAAS

平台及服务,在云端把客户所需的软件等环境整合的平台出租给用户,进行收费。

云厂商已经给大家搭建好了平台,这个平台出租给你一个空间,这个云端空间里面已经装好了各类所需的软件,比如操作系统、云数据库、云中间件、网关、云负载均衡器等相关的内容。

  • PAAS 优点:减少搭建环境的各种成本,用户可以减少资源。
  • 缺点:自由度和灵活度很低。

小结:

  • 其实我们平时使用云服务器,大多数是采用 IAAS+PASS 相互结合。

1.2.3 SAAS

软件即服务,也就是多用户的 web 系统。

对于用户来说,不需要关心技术问题,只要用你提供的服务就行。

  • 优点:方便便捷,可以有效的对资源进行利用,用户可以直接使用并且管理这些软件产生的数据就可以了,而且可以按需使用,选择需要功能付费不付费都行。可以有多个用户或者企业用户存在。
  • 缺点:用户数据在云端,自己不能完全有效的掌握

总结:

  • IaaS,是提供最底层的服务,因为最接近服务器硬件资源,这样用户可以以最大的自由度接入构建网络以及服务器配置;
  • PaaS,是提供了更高一层的服务。整体服务并没有向用户展示底层网络与硬件资源,整个底层是透明的,直接向用户开放云端产品软件以及开发运行环境;
  • SaaS,提供最上层服务。对于用户来说最简单,所见即所得,不需要技术开发人员也可以拥有自己的一套软件。

1.2 多租户 VS 单租户

何为多租户?说到租户,就来说说租房子。

二房东将房子租来后,进行装修、将房子分隔成 5 个隔断间,然后将每个隔断间的用户出租给张三、李四、王五... ,而这些租户他们是合租的,对方的房间他们进不去,这就是保证了各自的私密性,也就是数据隔离。

但是,对于公共区域是可以随时进入的,比如客厅、卫生间、厨房,这些数据就是共享数据,大家都可以访问,比如说掘金其实就是个多租户平台,对于共享的小册、活动大家都能看到,而对于创作者自身的数据就是只能通过用户自己的 id 自己查看。

所以,其实对于SAAS多租户系统,要比单一系统来的更加节省硬件资源,因为我们只需要部署一套系统就可以了,所有的硬件设备也只需要采购一次。但是相对来说,我们不能为企业提供定制化的需求方案,对于特定的要求,多租户不好去满足,但是一般来说,我们可以收集各 方需求,去把各个租户的需求整合,然后根据收取不同的费用,提供可选的软件服务即可,那么这个就是saas的体现。

而单租户就是整租的概念,所有设施都是自己在用,定制化要求高,同时对于互联网来说,很多老系统还是单租户,每年的维护费用也是非常高的,给不同的企业进行定制化开发和部署。

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Mybatis多租户是指在一个系统中,将数据按照租户进行隔离,每个租户只能访问自己的数据,实现多租户的数据管理。Mybatis-Plus提供了一个多租户插件TenantLineInnerInterceptor,可以方便地实现多租户功能。 使用Mybatis-Plus多租户插件,可以在SQL执行前自动添加租户条件,从而实现数据的隔离。插件会根据当前登录用户或者其他标识,自动将租户字段添加到SQL中的WHERE条件中,确保每个租户只能访问自己的数据。 下面是一个使用Mybatis-Plus多租户插件的示例代码: ```java // 配置多租户插件 @Configuration public class MybatisPlusConfig { @Bean public TenantLineInnerInterceptor tenantLineInnerInterceptor() { TenantLineInnerInterceptor tenantLineInnerInterceptor = new TenantLineInnerInterceptor(); // 设置租户字段名 tenantLineInnerInterceptor.setTenantLineFieldName("tenant_id"); // 设置租户ID获取器,用于获取当前租户ID tenantLineInnerInterceptor.setTenantIdGetter(new TenantIdGetter() { @Override public Expression getTenantId() { // 根据实际情况获取当前租户ID Long tenantId = getCurrentTenantId(); return new LongValue(tenantId); } }); return tenantLineInnerInterceptor; } @Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); interceptor.addInnerInterceptor(tenantLineInnerInterceptor()); return interceptor; } } ``` 在上述代码中,我们配置了一个TenantLineInnerInterceptor,并设置了租户字段名和租户ID获取器。然后将该拦截器添加到Mybatis-Plus的拦截器链中。 通过以上配置,当执行SQL时,插件会自动根据当前租户ID添加租户条件,确保每个租户只能访问自己的数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值