Mybatis数据隔离,摆脱注解束缚,实现简单到令人惊叹,究竟有多简单?
- 内容介绍
- 文章标签
- 相关问答
一、项目中绕不开的话题,“数据隔离”
在做管理程序时一定绕不开“数据隔离”这个场景
- 租户A只能看到A产生的数据
- 订单数据。后台能看自己组织下的所有订单,但是到了C端,每个人只能看到自己的订单
二、常规做法让人崩溃!手动维护成本高
-
❌ 自己sql中去拼筛选条件 每个SQL手动拼接WHERE条件?太原始了,代码重复率爆表!
-
❌ 封装一个注解。每个需要的接口标注一下 看似优雅,但依然要
@DataIsolation到处粘贴!维护成本依然高企, -
❌两种方式本质相同:业务代码必须主动参与隔离逻辑实现!这根本不是“隔离”该有的样子!
再看痛点。开发者应该专注业务逻辑,而不是反复处理重复代码!
三、了解一下Sangsang框架:彻底解放双手的MyBatis数据隔离方案🚀
一款专为 Java 开发者建立的透明数据中间层框架。基于Mybatis拦截器。它的主要原则只有一条:
从主要理念来看,全局规则统一配置🚀
- 数据隔离应该是一个很单纯的场景,同一种数据在全局的数据隔离规则都是一样的
- 这个规则应该是适用于全局的,而不是需要在每个接口都要去实现一套这个逻辑
- 我们其实也不需要每个接口,每个sql进行标注了,仅需全局配置一次即可.
再看典型场景示例。订单程序对比🚀
传统方案 vs Sangsang方案
|
|
传统方案:后台+C端需要分别处理
|
Sangsang方案:全局规则配置一次即可
|
|
配置文件的观点是。
sangsang.isolation.enable=true
sangsang.rules.order_table.condition=user_id if c_end else org_id
sangsang.rules.order_table.filter.user_id=${currentUser.id}
sangsang.rules.order_table.filter.org_id=${currentOrg.id}
sangsang.rules.order_table.role.admin=true
|
一、项目中绕不开的话题,“数据隔离”
在做管理程序时一定绕不开“数据隔离”这个场景
- 租户A只能看到A产生的数据
- 订单数据。后台能看自己组织下的所有订单,但是到了C端,每个人只能看到自己的订单
二、常规做法让人崩溃!手动维护成本高
-
❌ 自己sql中去拼筛选条件 每个SQL手动拼接WHERE条件?太原始了,代码重复率爆表!
-
❌ 封装一个注解。每个需要的接口标注一下 看似优雅,但依然要
@DataIsolation到处粘贴!维护成本依然高企, -
❌两种方式本质相同:业务代码必须主动参与隔离逻辑实现!这根本不是“隔离”该有的样子!
再看痛点。开发者应该专注业务逻辑,而不是反复处理重复代码!
三、了解一下Sangsang框架:彻底解放双手的MyBatis数据隔离方案🚀
一款专为 Java 开发者建立的透明数据中间层框架。基于Mybatis拦截器。它的主要原则只有一条:
从主要理念来看,全局规则统一配置🚀
- 数据隔离应该是一个很单纯的场景,同一种数据在全局的数据隔离规则都是一样的
- 这个规则应该是适用于全局的,而不是需要在每个接口都要去实现一套这个逻辑
- 我们其实也不需要每个接口,每个sql进行标注了,仅需全局配置一次即可.
再看典型场景示例。订单程序对比🚀
传统方案 vs Sangsang方案
|
|
传统方案:后台+C端需要分别处理
|
Sangsang方案:全局规则配置一次即可
|
|
配置文件的观点是。
sangsang.isolation.enable=true
sangsang.rules.order_table.condition=user_id if c_end else org_id
sangsang.rules.order_table.filter.user_id=${currentUser.id}
sangsang.rules.order_table.filter.org_id=${currentOrg.id}
sangsang.rules.order_table.role.admin=true
|

