Mybatis-plus allEq

 源码:

    /**
     * ignore
     */
    default <V> Children allEq(Map<R, V> params) {
        return allEq(params, true);
    }

    /**
     * ignore
     */
    default <V> Children allEq(Map<R, V> params, boolean null2IsNull) {
        return allEq(true, params, null2IsNull);
    }

    /**
     * map 所有非空属性等于 =
     *
     * @param condition   执行条件
     * @param params      map 类型的参数, key 是字段名, value 是字段值
     * @param null2IsNull 是否参数为 null 自动执行 isNull 方法, false 则忽略这个字段\
     * @return children
     */
    <V> Children allEq(boolean condition, Map<R, V> params, boolean null2IsNull);

    /**
     * ignore
     */
    default <V> Children allEq(BiPredicate<R, V> filter, Map<R, V> params) {
        return allEq(filter, params, true);
    }

    /**
     * ignore
     */
    default <V> Children allEq(BiPredicate<R, V> filter, Map<R, V> params, boolean null2IsNull) {
        return allEq(true, filter, params, null2IsNull);
    }

    /**
     * 字段过滤接口,传入多参数时允许对参数进行过滤
     *
     * @param condition   执行条件
     * @param filter      返回 true 来允许字段传入比对条件中
     * @param params      map 类型的参数, key 是字段名, value 是字段值
     * @param null2IsNull 是否参数为 null 自动执行 isNull 方法, false 则忽略这个字段
     * @return children
     */
    <V> Children allEq(boolean condition, BiPredicate<R, V> filter, Map<R, V> params, boolean null2IsNull);

用法:

一个参数

跟eq() 一样,只不过可以传多个参数。

传一个Map<R, V>的情况 

public CommonRes getAdminList(Integer id, String keyWord) {
    QueryWrapper<TAdmin> tAdminQueryWrapper = new QueryWrapper<>();
    Map<String, Object> map = new HashMap<>() {
        {
            put("name", "武军");
        }
    };
    tAdminQueryWrapper.allEq(map);
    List<TAdmin> adminList = itAdminService.list(tAdminQueryWrapper);
    return new CommonRes().success("操作员查询成功", adminList);
}

两个参数的情况

(Map<R, V> params, boolean null2IsNull)

为true情况:

null2IsNull默认为true,什么意思?如果参数而设置true,当map值为null时,查询的时候 字段查的是 is null

public CommonRes getAdminList(Integer id, String keyWord) {
    QueryWrapper<TAdmin> tAdminQueryWrapper = new QueryWrapper<>();
    Map<String, Object> map = new HashMap<>() {
        {
            put("name", "武军"); put("id", null);
        }
    };
    tAdminQueryWrapper.allEq(map, true);
    List<TAdmin> adminList = itAdminService.list(tAdminQueryWrapper);
    return new CommonRes().success("操作员查询成功", adminList);
}


 为false的情况:

为false时,会忽略字段为null的情况,所以数据全部查出来了。

public CommonRes getAdminList(Integer id, String keyWord) {
    QueryWrapper<TAdmin> tAdminQueryWrapper = new QueryWrapper<>();
    Map<String, Object> map = new HashMap<>() {
        {
            put("id", null);
        }
    };
    tAdminQueryWrapper.allEq(map, false);
    List<TAdmin> adminList = itAdminService.list(tAdminQueryWrapper);
    return new CommonRes().success("操作员查询成功", adminList);
}

 

参数为 BiPredicate<R, V> filter

BiPredicate 是java种的一个函数接口

返回是布尔值,通常会使用lambda 表达式来实现它,它的作用定义一个规则(过滤规则),之后使用test方法判断,会过滤掉返回false条件。

 使用

当map中的key为"password"时,在查询时会被忽略。

public CommonRes getAdminList(Integer id, String keyWord) {
    QueryWrapper<TAdmin> tAdminQueryWrapper = new QueryWrapper<>();
    Map<String, Object> map = new HashMap<>() {
        {
            put("id", 1);put("password", "123");
        }
    };
    tAdminQueryWrapper.allEq((k, v) -> !k.equals("password"), map);
    List<TAdmin> adminList = itAdminService.list(tAdminQueryWrapper);
    return new CommonRes().success("操作员查询成功", adminList);
}

 当参数有BiPredicate 时,源码内部先遍历Map集合,使用BiPredicate接口中的test方法判断每一个key,只有符合我们自己定义的规则(!k.equals("password")) 时,才能进入if中,内部还是通过eq()来进行查询的;else 语句是判断null2isNull 是不是true,为true的话直接调用 isNull方法,sql查询条件会带上字段为null的情况。

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值