在Mybatis-Plus中,Wrapper接口的实现类关系如下:
可以看到,AbstractWrapper和AbstractChainWrapper是重点实现,接下来我们重点看下AbstractWrapper以及其子类。
说明:QueryWrapper(LambdaQueryWrapper) 和 UpdateWrapper(LambdaUpdateWrapper) 的父类 用于生成 sql的 where 条件, entity 属性也用于生成 sql 的 where 条件
注意:entity 生成的 where 条件与使用各个 api 生成的 where 条件 没有任何关联行为
文档地址:https://mybatis.plus/guide/wrapper.html
allEq
说明
- allEq(Map<R, V> params)
- allEq(Map<R, V> params, boolean null2IsNull)
- allEq(boolean condition, Map<R, V> params, boolean null2IsNull)
全部eq(或个别isNull)
个别参数说明: params : key 为数据库字段名, value 为字段值 null2IsNull : 为 true 则在 map 的 value 为
null 时调用 isNull 方法,为 false 时则忽略 value 为 null 的
例1: allEq({id:1,name:“老王”,age:null}) —> id = 1 and name = ‘老王’ and age is null
例2: allEq({id:1,name:“老王”,age:null}, false) —> id = 1 and name = ‘老王’
- allEq(BiPredicate<R, V> filter, Map<R, V> params)
- allEq(BiPredicate<R, V> filter, Map<R, V> params, boolean null2IsNull)
- allEq(boolean condition, BiPredicate<R, V> filter, Map<R, V> params, boolean null2IsNull)
个别参数说明: filter : 过滤函数,是否允许字段传入比对条件中 params 与 null2IsNull : 同上
例1: allEq((k,v) -> k.indexOf(“a”) > 0, {id:1,name:“老王”,age:null}) —> name = ‘老王’ and age is null
例2: allEq((k,v) -> k.indexOf(“a”) > 0, {id:1,name:“老王”,age:null}, false) —> name = ‘老王’
测试用例
@Test public void testAllEq() { // 设置条件 Map<String, Object> params = new HashMap<>(); params.put("name", "李四"); params.put("age", "20"); params.put("password", null); QueryWrapper<User> wrapper = new QueryWrapper<>(); // SELECT id,user_name,name,age,email AS mail FROM tb_user WHERE password IS NULL AND name = ? AND age = ? // wrapper.allEq(params); // SELECT id,user_name,name,age,email AS mail FROM tb_user WHERE name = ? AND age = ? // wrapper.allEq(params, false); // SELECT id,user_name,name,age,email AS mail FROM tb_user WHERE age = ? // wrapper.allEq((k, v) -> (k.equals("age") || k.equals("id")), params); // SELECT id,user_name,name,age,email AS mail FROM tb_user WHERE name = ? AND age = ? wrapper.allEq((k, <div style="color:transparent">本文来源gaodai.ma#com搞##代!^码网(</div>v) -> (k.equals("age") || k.equals("id") || k.equals("name")), params); List<User> users = this.userMapper.selectList(wrapper); for (User user : users) { System.out.println(user); } }
基本比较操作
- eq:等于 =
- ne:不等于 <>
- gt:大于 >
- ge:大于等于 >=
- lt:小于 <
- le:小于等于 <=
- between:BETWEEN 值1 AND 值2
- notBetween:NOT BETWEEN 值1 AND 值2
- in:字段 IN (value.get(0), value.get(1), …)
- notIn:字段 NOT IN (v0, v1, …)
测试用例
@Test public void testEq() { QueryWrapper<User> wrapper = new QueryWrapper<>(); // SELECT id,user_name,name,age,email AS mail FROM tb_user WHERE password = ? AND age >= ? AND name IN (?,?,?) wrapper.eq("password", "123456").ge("age", 20).in("name", "李四", "王五", "赵六"); List<User> users = this.userMapper.selectList(wrapper); for (User user : users) { System.out.println(user); } }