源码:
/**
* 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的情况。