基于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: 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值