mybatis-plus 条件构造器的使用(QueryWrapper、UpdateWrapper和 LambdaQueryWrapper)

 1、简介

        为了实现简化操作,mybatis-plus 引入条件构造器简化基本 sql 操作,主要使用两种,一种是查询的条件构造器(QueryWrapper),另外一种是(UpdateWrapper),这些条件构造器主要关系如下:

2、查询条件构造(QueryWrapper 和 LambdaQueryWrapper在一起比较)

        查询条件构造有两个,一个是 QueryWrapper 另一个是 LambdaQueryWrapper,LambdaQueryWrapper 是为了防止 QueryWrapper 构造条件的时候将字段名写错因发错误,因此 LambdaQueryWrapper 更加常用。下面就详细介绍两种条件构造的具体使用方式。

2.1、eq方法(ne方法同样用法)
// 两种写法
// 1、queryWrapper
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("name","Jack");
// 2、LambdaQueryWrapper(常用)
LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(User::getName,"Jack");
// 3、当为null的条件,我们是不需要进行查询条件拼接的,否则就会出现无法查询出结果,在构建lambdaQueryWrapper时判断
lambdaQueryWrapper.eq(name != null,User::getName,name);
2.2、allEq方法
// 等价与多个eq
HashMap<String, Object> hashMap = new HashMap<>();
hashMap.put("name","Jone");
hashMap.put("age",null);
queryWrapper.allEq(hashMap,false);
// allEq(Map<R, V> params, boolean null2IsNull); 
// 参数params: 表示传递的Map集合;
// 参数null2IsNull: 表示对于为null的条件是否判断isNul
2.3、gt & ge & lt & le & between & notBetween

        下面使用 LambdaQueryWrapper 进行演示,如果使用 QueryWrapper 将lambda 表达式获取字段名写成具体的字段名即可。

lambdaQueryWrapper.gt(User::getAge,age); // 大于
lambdaQueryWrapper.ge(User::getAge,age); // 大于等于
lambdaQueryWrapper.lt(User::getAge,age); // 小于
lambdaQueryWrapper.le(User::getAge,age); // 小于等于
lambdaQueryWrapper.between(User::getAge,18,30); // 介于之间
lambdaQueryWrapper.notBetween(User::getAge,18,30); // 介于之间之外
2.4、like & notLike & likeLeft & likeRight
lambdaQueryWrapper.like(User::getName,"J"); // 封装的查询条件为 '%J%'
lambdaQueryWrapper.notLike(User::getName,"J");
lambdaQueryWrapper.likeLeft(User::getName,"J"); // 封装的查询条件为 '%J'
lambdaQueryWrapper.likeRight(User::getName,"J"); // 封装的查询条件为 'J%'
2.5、isNull & isNotNull
lambdaQueryWrapper.isNull(User::getName);  // 拼接的查询条件为 name is null
lambdaQueryWrapper.isNotNull(User::getName);  // 拼接的查询条件为 name is not null
2.6、in & notIn & inSql & notInSql
// 1、使用列表形式
ArrayList<Integer> arrayList = new ArrayList<>();
Collections.addAll(arrayList,18,20,21);
lambdaQueryWrapper.in(User::getAge,arrayList);
// 2、使用列举值形式
lambdaQueryWrapper.in(User::getAge,18,20,21);
// ================= notIn ====================
notIn用法和in相同
// ================= inSql ====================
lambdaQueryWrapper.inSql(User::getAge,"18,20,22"); // 拼接的sql为 age in (18,20,22)
lambdaQueryWrapper.inSql(User::getAge,"select age from user where age > 20"); //age in (select ...)
// ================= notInSql =================
lambdaQueryWrapper.notInSql(User::getAge,"18,20,22"); // 拼接的sql为 age not in (18,20,22)
lambdaQueryWrapper.notInSql(User::getAge,"select age from user where age > 20"); //age not in (select ...)
 2.7、groupBy & having
// 设置条件,指定查询字段名称和分组字段
queryWrapper.groupBy("age");
queryWrapper.select("age,count(*) as field_count");
queryWrapper.having("field_count = 1");
List<Map<String, Object>> maps = userMapper.selectMaps(queryWrapper);
2.8、orderByAsc & orderByDesc & orderBy
// 指定的字段都为升序,按照先后顺序
lambdaQueryWrapper.orderByAsc(User::getAge,User::getId);
// 指定的字段都为降序,按照先后顺序
lambdaQueryWrapper.orderByDesc(User::getAge,User::getId);
// orderBy(boolean condition, boolean isAsc, R column, R... columns)
lambdaQueryWrapper.orderBy(true,true,User::getId);
lambdaQueryWrapper.orderBy(true,false,User::getAge);
 2.9、func
lambdaQueryWrapper.func(i -> {
    if(true) {
        i.eq(User::getId, 1);
    }else {
        i.ne(User::getId, 1);
    }
});
// 拼接的sql为: where id = 1
2.10、and & or & nested
// 正常拼接默认就是and
lambdaQueryWrapper.gt(User::getAge,22).lt(User::getAge,30);
// 使用链式拼接,and嵌套
lambdaQueryWrapper.eq(User::getName,"wang").and(i -> i.gt(User::getAge,26).or().lt(User::getAge,22));
// or嵌套
lambdaQueryWrapper.eq(User::getName,"wang").or(i -> i.gt(User::getAge,22).lt(User::getAge,26));
// nested TODO
lambdaQueryWrapper.nested(i -> i.eq(User::getName, "Billie").ne(User::getAge, 22));
2.11、自定义查询条件(apply, last)
// apply
lambdaQueryWrapper.apply("id = 1");  // 拼接的sql为 where id = 1
// last
lambdaQueryWrapper.last("limit 0,2"); // 拼接的sql是在末尾加上 limit 0, 2
2.12、exists & notExists
// 判断指定sql是否能查询出数据,查询有结果返回true, 否则不查询。 where exists ...
lambdaQueryWrapper.exists("select id from powershop_user where age = 18");
// 判断指定sql是否能查询出数据,查询无结果查询, 否则不查询。 where not exists ...
lambdaQueryWrapper.notExists("select id from powershop_user where age = 18");
2.13、指定字段查询(select)
lambdaQueryWrapper.select(User::getId,User::getName);  // 拼接的sql为 select id, name from ...
3、更新条件构造(UpdateWrapper 和 LambdaUpdateWrapper(常用))

        UpdateWrapper 和 LambdaUpdateWrapper 与查询条件构造器在拼接条件时候使用方式基本一致,不同点是需要更新值,使用 set。具体细节不再赘述。

UpdateWrapper<User> userUpdateWrapper = new UpdateWrapper<>();
userUpdateWrapper.set("aa",0);

// UpdateWrapper 使用 lambda 方法后,可以使用lambda 表达式,可以链式编程,与LambdaUpdateWrapper 效果一致
userUpdateWrapper.lambda().set(User::getName,"aa");
LambdaUpdateWrapper<User> lambdaUpdateWrapper = new LambdaUpdateWrapper<>();
lambdaUpdateWrapper.set(User::getName,"bb");

总结:本文介绍了 mybatis-plus 使用条件构造器简化 sql 操作,方便快捷。

        本人是一个从小白自学计算机技术,对运维、后端、各种中间件技术、大数据等有一定的学习心得,想获取自学总结资料(pdf版本)或者希望共同学习,关注微信公众号:it自学社团。后台回复相应技术名称/技术点即可获得。(本人学习宗旨:学会了就要免费分享)

  • 17
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Mybatis-plus提供了强大的条件构造器,用于构建查询、删除和修改操作的条件条件构造器主要包括QueryWrapperUpdateWrapperLambdaQueryWrapperLambdaUpdateWrapper几种类型。QueryWrapper用于构建查询条件UpdateWrapper用于构建更新条件LambdaQueryWrapperLambdaUpdateWrapper是对应的Lambda表达式版本。 通过使用条件构造器,可以方便地构建复杂的查询条件,包括等于、不等于、大于、小于、模糊查询等操作。可以通过链式调用的方式添加多个条件,并且支持使用and和or操作符进行条件组合。 例如,可以使用QueryWrapper来构建查询条件: ``` QueryWrapper<User> queryWrapper = new QueryWrapper<>(); queryWrapper.eq("age", 18) .like("name", "张") .in("department", "技术部", "市场部"); List<User> userList = userMapper.selectList(queryWrapper); ``` 以上示例中,通过eq方法指定age字段等于18,通过like方法指定name字段以"张"开头,通过in方法指定department字段为"技术部"或"市场部",最后通过selectList方法查询符合条件的结果。 类似地,可以使用UpdateWrapper来构建更新条件LambdaQueryWrapperLambdaUpdateWrapper使用方式与之类似。 总之,mybatis-plus条件构造器提供了一种方便灵活的方式来构建查询、删除和修改操作的条件,帮助开发人员更高效地编写数据库操作代码。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Mybatis-Plus条件构造器](https://blog.csdn.net/weixin_43166227/article/details/95260730)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [MyBatisPlus——条件构造器](https://blog.csdn.net/chenxingxingxing/article/details/124533788)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [毕设项目:基于springboot+MyBatis实现的恋家房产平台](https://download.csdn.net/download/qq_35831906/88227269)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

知其_所以然

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值