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>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构