跳转到主内容
极星编程网:以代码为星,赴技术山海!

MyBatisPlus-QueryWrapper多条件查询及修改方式

目录gt、ge、lt、le、isNull、isNotNull eq、ne between、notBetween allEq like、notLike、likeLeft、likeRight in、notIn、inSql、notinSql、exists、notExists or、and嵌套 or、嵌套 and orderBy、orderByDesc、orderByAsc last指定要查询的列set、setSql gt、ge、lt、le、isNull、isNotNull大于 >例: gt("age", 18) → age > 18 ge 大于等于 >=例: ge("age", 18) → age >= 18 lt 小于 <例: lt("age", 18) → age < 18 le 小于等于 <=例: le("age", 18) → age <= 18 isNUll 字段 IS NULL例: isNull("name") → name is null isNotNull 字段 IS NOT NULL例: isNotNull("name") → name is not null@Test public void queryWrapperOne() {QueryWrapper 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 <> '老王'@Test public void queryWrapperTwo() {QueryWrapper 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 = '老王'@Test public void queryWrapperFour() {QueryWrapper queryWrapper = new QueryWrapper<>();Map queryParamsMap = new HashMap<>();queryParamsMap.put("id", 1373266771933462530L);queryParamsMap.put("name", "BNTang");queryParamsMap.put("age", 23);queryWrapper.allEq(queryParamsMap);List users = userMapper.selectList(queryWrapper);users.forEach(System.out::println);}

个别参数说明filter: 过滤函数, 是否允许字段传入比对条件中params 与 null、IsNull 同上例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 = '老王'

如上图可看到,只添加了一个 id 查询的条件因为我写的过滤条件为要包含 i 这个字符串,所以只有第一个 key, value 包含了所以就只添加了 id like、notLike、likeLeft、likeRight LIKE '%值%'例: like("name", "王")→name like '%王%'NOT LIKE '%值%'例: notLike("name", "王")→name not like '%王%'LIKE '%值'例: likeLeft("name", "王")→name like '%王'LIKE '值%'例: likeRight("name", "王")→name like '王%'@Test public void queryWrapperFive() {QueryWrapper queryWrapper = new QueryWrapper<>();queryWrapper.notLike("name", "BNTang").likeRight("email", "zq");// 返回值是Map列表List> users = userMapper.selectMaps(queryWrapper);users.forEach(System.out::println);}

in、notIn、inSql、notinSql、exists、notExists字段 IN (value.get(0), value.get(1), ...)例: in("age",{1,2,3})→age in (1,2,3)字段 NOT IN (value.get(0), value.get(1), ...)例: notIn("age",{1,2,3})→age not in (1,2,3)字段 IN ( sql语句 )例: 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)@Test public void queryWrapperSix() {QueryWrapper queryWrapper = new QueryWrapper<>();queryWrapper.in("id", 1, 2, 3);queryWrapper.inSql("id", "select id from user where id < 3");// 返回值是Object列表List 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 <> '活着')@Test public void queryWrapperSeven() {// 修改值User user = new User();user.setAge(99);user.setName("BNTang6666");// 修改条件UpdateWrapper userUpdateWrapper = new UpdateWrapper<>();userUpdateWrapper.like("name", "BNTang").or().between("age", 20, 30);int result = userMapper.update(user, userUpdateWrapper);System.out.println(result);}

嵌套 or、嵌套 and@Test public void queryWrapperEight() {// 修改值User user = new User();user.setAge(99);user.setName("BNTang6666");// 修改条件UpdateWrapper 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@Test public void queryWrapperNine() {QueryWrapper queryWrapper = new QueryWrapper<>();queryWrapper.orderByDesc("id");List users = userMapper.selectList(queryWrapper);users.forEach(System.out::println);}

last无视优化规则直接拼接到 sql 的最后

注意事项:

只能调用一次, 多次调用以最后一次为准有 sql 注入的风险, 请谨慎使用例: last("limit 1")@Test public void queryWrapperTen() {QueryWrapper queryWrapper = new QueryWrapper<>();queryWrapper.last("limit 1");List users = userMapper.selectList(queryWrapper);users.forEach(System.out::println);}

指定要查询的列@Test public void queryWrapperEleven() {QueryWrapper queryWrapper = new QueryWrapper<>();queryWrapper.select("id", "name", "age");

List users = userMapper.selectList(queryWrapper);users.forEach(System.out::println);}

set、setSql SQL SET 字段例: set("name", "老李头")例: set("name", "")→数据库字段值变为空字符串例: set("name", null)→据库字段值变为null设置 SET 部分 SQL例: setSql("name = '老李头'")@Test public void queryWrapperTwelve() {// 修改值User user = new User();user.setAge(10);// 修改条件UpdateWrapper userUpdateWrapper = new UpdateWrapper<>();userUpdateWrapper.like("name", "A")// 除了可以查询还可以使用set设置修改的字段.set("name", "BNTang")// 可以有子查询.setSql(" email = '303158131@qq.com'");int result = userMapper.update(user, userUpdateWrapper);System.out.println(result);}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:MybatisPlus的LambdaQueryWrapper用法详解解决SpringBoot搭建MyBatisPlus中selectList遇到LambdaQueryWrapper报错问题MybatisPlus中QueryWrapper常用方法总结MybatisPlus lambdaQueryWrapper中常用方法的使用MybatisPlus QueryWrapper常用方法实例使用mybatisPlus的queryWrapper做左联接,内联接方式

相关文章