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>