@Testpublic void queryWrapperOne() { QueryWrapper<User> queryWrapper = new QueryWrapper<>(); queryWrapper. isNull("name") .ge("age", 23) .isNotNull("email"); // 逻辑删除 int result = userMapper.delete(queryWrapper); System.out.println(result); // 最终的语句为:UPDATE user SET deleted=1 WHERE deleted=0 AND name IS NULL AND age >= ? AND email IS NOT NULL}
eq、ne
eq 等于 =
例: eq(“name”, “老王”) → name = ‘老王’
ne 不等于 <>
例: ne(“name”, “老王”) → name <> ‘老王’
@Testpublic void queryWrapperTwo() { QueryWrapper<User> queryWrapper = new QueryWrapper<>(); queryWrapper.eq("name", "BNTang"); // selectOne:返回的是一条记录,当出现多条时会报错 User user = userMapper.selectOne(queryWrapper); System.out.println(user);}
between、notBetween
BETWEEN 值1 AND 值2
例: between(“age”, 18, 30) → age between 18 and 30
NOT BETWEEN 值1 AND 值2
例: notBetween(“age”, 18, 30) → age not between 18 and 30
allEq
allEq 全部 eq(或个别 isNull)
个别参数说明:
params: key 为数据库字段名, value 为字段值
如果想表示 null isNull,则在 value 取值的时候传入一个 null, 为 null 时调用 isNull
方法
, 为false时则忽略value为null的,也就是不拼接 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 = ‘老王’
例: inSql(“age”, “1,2,3,4,5,6”)→age in (1,2,3,4,5,6)
例: inSql(“id”, “select id from table where id < 3”)→id in (select id from table where id < 3)
字段 NOT IN ( sql语句 )
例: notInSql(“age”, “1,2,3,4,5,6”)→age not in (1,2,3,4,5,6)
例: notInSql(“id”, “select id from table where id < 3”)→id not in (select id from table where id < 3)
拼接 EXISTS ( sql语句 )
例: exists(“select id from table where age = 1”)→exists (select id from table where age = 1)
拼接 NOT EXISTS ( sql语句 )
例: notExists(“select id from table where age = 1”)→not exists (select id from table where age = 1)
@Testpublic void queryWrapperSix() { QueryWrapper<User> queryWrapper = new QueryWrapper<>(); queryWrapper.in("id", 1, 2, 3); queryWrapper.inSql("id", "select id from user where id < 3"); // 返回值是Object列表 List<Object> users = userMapper.selectObjs(queryWrapper); users.forEach(System.out::println);}
or、and
拼接 OR
注意事项:
主动调用or表示紧接着下一个方法不是用and连接!(不调用or则默认为使用and连接)
例: eq(“id”,1).or().eq(“name”,”老王”)→id = 1 or name = ‘老王’
OR 嵌套
例: or(i -> i.eq(“name”, “李白”).ne(“status”, “活着”))→or (name = ‘李白’ and status <> ‘活着’)
AND 嵌套
例: and(i -> i.eq(“name”, “李白”).ne(“status”, “活着”))→and (name = ‘李白’ and status <> ‘活着’)
@Testpublic void queryWrapperSeven() { // 修改值 User user = new User(); user.setAge(99); user.setName("BNTang6666"); // 修改条件 UpdateWrapper<User> userUpdateWrapper = new UpdateWrapper<>(); userUpdateWrapper .like("name", "BNTang") .or() .between("age", 20, 30); int result = userMapper.update(user, userUpdateWrapper); System.out.println(result);}
嵌套 or、嵌套 and
@Testpublic void queryWrapperEight() { // 修改值 User user = new User(); user.setAge(99); user.setName("BNTang6666"); // 修改条件 UpdateWrapper<User> userUpdateWrapper = new UpdateWrapper<>(); userUpdateWrapper .like("name", "A") .or(i -> i.eq("name", "BNTang6666").ne("age", 20)); int result = userMapper.update(user, userUpdateWrapper); System.out.println(result);}
orderBy、orderByDesc、orderByAsc
排序:ORDER BY 字段, …
例: orderBy(true, true, “id”, “name”)→order by id ASC,name ASC
排序:ORDER BY 字段, … DESC
例: orderByDesc(“id”, “name”)→order by id DESC, name DESC
排序:ORDER BY 字段, … ASC
例: orderByAsc(“id”, “name”)→order by id ASC,name ASC