mybatis plus通过java代码进行权限等全局控制

在mapper.xml中调用java静态方法,并且传递一些参数

在静态方法中进行sql拼接,可以用于用户权限管理、数据权限管理等等

一、静态方法

拼接sql,可以调用缓存中的用户权限进行拼接

复制代码
package com.example.demo.dataScope;

import java.util.List;

/**
 * 数据库权限控制器
 */
public class DataScopeUtil {

    /**
     * 装置编码集合
     * @param alias 数据库表别名
     * @param deviceCodes 数据库查询条件的参数
     */
    public static String deviceCodeListScopeSql(String alias, List<String> deviceCodes){
        StringBuilder scopeSql = new StringBuilder();
        scopeSql.append(" in (select t.id from (");
        deviceCodes.stream().forEach(e->{
            String str = " (select '"+e+"' as id from dual) union";
            scopeSql.append(str);
        });
        scopeSql.replace(scopeSql.lastIndexOf("union"),scopeSql.length(),"");
        scopeSql.append(" )t )");
        scopeSql.insert(0," and "+alias);
        return scopeSql.toString();
    }

}
复制代码

二、xml使用

@com.example.demo.dataScope.DataScopeUtil 包地址

@deviceCodeListScopeSql 调用的方法名称

"gyz" 表别名,可以传 ""/null

deviceCodes mapper方法的参数名称

<select>
    ${@com.example.demo.dataScope.DataScopeUtil@deviceCodeListScopeSql("gzy",deviceCodes)}
</select>

 

posted @   雨梦大木  阅读(231)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示