MyBatis Plus 添加多租户功能后 对某个Mapper方法 忽略多租户处理: 使用注解@InterceptorIgnore(tenantLine= "true")
方案二:使用mp官方的多租户插件,此处代码省略,自行去官方文档上查询 (二).官方多租户的方案的优化和坑 采用了官方文档的多租户插件后,前期调试很顺利,crud 都自测过了,以为没有问题了,于是就发测试环境了,但是随着测试的深入,发现了好多问题和需要改动的地方,此处列举: 1.分析哪些需要加多租户,哪些不需要加 (1...
Mapper 类方法添加注解: @InterceptorIgnore(tenantLine = "true") 1. 亲测有效。
首先我们要求每一条SQL都加上租户id这个过滤条件,这意味着我们需要解析原始SQL在合适的地方加上租户id过滤条件,我们知道mybatis提供扩展点就是拦截器,可以对SQL语句处理前后进行增强逻辑,分页插件就是这么做的,所以我们这里要增强SQL自然也是这样,接下来我们就来看看mybatis-plus多租户插件是怎么实现多租户数据隔离的。
在之前经理的某家公司中,经历了一个saas服务的某些功能的数据量不断变大的过程,因为各种功能和性能的原因想到的方法就是直接按saas租户做分库和按租户对某些数据量大的表做分表。但是在我离职之前这两种方式都未能实现。不过,最近刚好看到Mybatis-Plus的多租户的拦截器功能,想到可以用来做第二种方案的问题的解决方法...
* 默认都要进行解析并拼接多租户条件 * * @param tableName 表名 * @return 是否忽略, true:表示忽略,false:需要解析并拼接多租户条件 */ default boolean ignoreTable(String tableName) { return false; } } 1. 2. 3. 4. 5. 6. 7. 8. ...
* 根据表名判断是否忽略拼接多租户条件 * * @param tableName * @return */ @Override public boolean ignoreTable(String tableName) { return IGNORE_TABLE_NAMES.contains(tableName); } } 2.定义MybatisPlusConfig配置类将多租户插件生效: import com.baomidou.mybatisplus.annotation.DbType; ...
* 根据表名判断是否忽略拼接多租户条件 * * 默认都要进行解析并拼接多租户条件 * * @param tableName 表名 * @return 是否忽略, true:表示忽略,false:需要解析并拼接多租户条件 */ default boolean ignoreTable(String tableName) { return false; } }...
二、@InterceptorIgnore 的使用 拦截忽略注解 @InterceptorIgnore image.png 各属性返回 true 表示不走插件(在配置了插件的情况下,不填则默认表示 false) 例如想多租户屏蔽某个特定mapper的方法则 @InterceptorIgnore(tenantLine="true")DxUserloginByLoginname(@Param("loginname")String loginname);...
* @return 租户字段名 */StringgetTenantIdColumn();/** * 根据表名判断是否进行过滤 * @param tableName 表名 * @return 是否进行过滤, true:表示忽略,false:需要解析多租户字段 */booleandoTableFilter(StringtableName);} PreTenantHandler实现TenantHandler ...