基于Mybatis 数据过滤组件(二) - 使用文档
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: WHEREadminMode: true
自定义 DataFilterValueHandle 实现该接口,以此扩展获取${SYS_CODE}模板替换值和是否是管理员
代码示例
TestDataFilterValue 继承DataFilterValueHandle 实现。通常这里模板的值来源于系统一个公共的拦截器,设置在公共的ThreadLocal(ApplicationContextUtil)中
@Bean
public class TestDataFilterValue implements DataFilterValueHandle {@Overridepublic 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;}@Overridepublic 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