mybatis 数据过滤组件使用文档
基于Mybatis 数据过滤组件
使用我们的组件就可以不需要改动sql,自动的完成条件的添加。就像是现在很流行的pagehelper 分页插件一样的简单
maven 引入:
<dependency>
<groupId>mybatis</groupId>
<artifactId>mybatis-data-filter</artifactId>
<version>1.0</version>
</dependency>
配置
yml 配置示例
mybatis:
data-filter:
# where模板配置
whereSqlFormat: SYS_CODE IN (${SYS_CODE})
#selectFormat: SELECT * FROM (${SQL}) t WHERE ${CONDITION}
mod: WHERE
adminMode: true
自定义 DataFilterValueHandle 实现该接口,以此扩展获取${SYS_CODE}模板替换值和是否是管理员
代码示例
TestDataFilterValue 继承DataFilterValueHandle 实现。通常这里模板的值来源于系统一个公共的拦截器,设置在公共的ThreadLocal(ApplicationContextUtil)中
@Bean
public class TestDataFilterValue implements DataFilterValueHandle {
@Override
public Map<String, String> valueMap(PointParam pointParam) {
List<UserSystemDetailDTO> userList = (List<UserSystemDetailDTO>) ApplicationContextUtil.getValue(ApplicationContextUtil.USER_SYS_CODE);
String sysCodes = ZkSysCodeFactory.getUserListStr(userList);
Map<String, String> map = new HashMap<>();
map.put("SYS_CODE",sysCodes);
return map;
}
@Override
public boolean isAdmin(PointParam pointParam) {
Boolean isAdmin = ApplicationContextUtil.getIsAdmin();
return isAdmin == null ? false : isAdmin;
}
}
注解使用:
在service 或 mapper的接口上加 @DataFilter即可生效
代码示例:
@DataFilter
List<ZkInstanceResp> selectByPage();
做了上面的配置后组件就可以生效了。
配置优先级
@DataFilter -> DataFilterContextUtil -> MybatisDataFilterProperties
管理员配置
@DataFilter(adminMode=“true”)
设置adminMode开启管理员模式,如果是管理员则就不进行过滤.
mod模式讲解
- WHERE :修改第一个where条件,根据whereSqlFormat 模板进行替换。
例如:
WHERE SYS_CODE IN (${SYS_CODE}) and aa = ${aa} 替换 SELECT A,B,C FROM TT WHERE SYS_CODE IN (1,2,3) and aa = aa
- SELECT : 把查询作为子查询处理,根据selectFormat模板进行替换。
例如:SELECT * FROM (${SQL}) t where ${CONDITION} 替换SELECT * FROM (SELECT A,B,C FROM TT) t WHERE SYS_CODE IN (1,2,3) and aa = aa
该模式要求原select 字段中包含sys_code