广告
返回顶部
首页 > 资讯 > 操作系统 >【Java】Mybatis Plus LambdaQueryWrapper梳理
  • 859
分享到

【Java】Mybatis Plus LambdaQueryWrapper梳理

mybatisjavamysql 2023-08-30 17:08:50 859人浏览 独家记忆
摘要

【Java】mybatis-Plus LambdaQueryWrapper梳理 前言 为了更方便的实现动态 sql,Mybatis Plus 在其基础上扩展了 LambdaQueryWrapper,LambdaQueryWrapper 提供

【Java】mybatis-Plus LambdaQueryWrapper梳理

前言

为了更方便的实现动态 sql,Mybatis Plus 在其基础上扩展了 LambdaQueryWrapper,LambdaQueryWrapper 提供了更加简便的查询语法,同时也避免了 SQL 注入的风险。

LambdaQueryWrapper 实现了 QueryWrapper 的全部功能,并提供了基于 Lambda 表达式的查询方式,使得查询语法更加优雅。使用 LambdaQueryWrapper,可以方便的实现各种查询条件的拼接,如 whereandorinlikebetween 等条件。

LambdaQueryWrapper 通过函数式编程的方式,提供了多种方法用于实现各种查询条件的拼接,这些方法包括 eq、ne、gt、ge、lt、le、in、notIn、like、notLike、between、notBetween、isNull、isNotNull 等。

与QueryWrapper对比

LambdaQueryWrapper 和 QueryWrapper 都是 Mybatis Plus 中的查询条件封装类,其中 LambdaQueryWrapper 是基于 Lambda 表达式的实现,而 QueryWrapper 是基于字符串的实现。它们的优缺点如下:

LambdaQueryWrapper 优点

  1. 代码简洁,易读易写,使用 Lambda 表达式可避免手写字符串繁琐容易出错
  2. 类型安全,LambdaQueryWrapper 在编译期间就能够捕获类型错误避免运行时出现类型错误
  3. 更加灵活,LambdaQueryWrapper 支持链式调用,支持多个条件之间的 and 和 or 关系组合,支持子查询等复杂查询操作。

LambdaQueryWrapper 缺点

  1. LambdaQueryWrapper 基于 Lambda 表达式实现,可能存在一些性能问题,在大数据量查询时可能会影响查询性能。

QueryWrapper 优点

  1. 在少量数据查询时,QueryWrapper 通常比 LambdaQueryWrapper 更快,因为它不需要解析 Lambda 表达式
  2. QueryWrapper 更加灵活,可以使用字符串直接拼接 SQL,支持 SQL 函数等更多高级查询操作
  3. 对于老旧代码,QueryWrapper 更加适合兼容扩展

QueryWrapper 缺点

  1. 代码可读性和可维护性较差,手写 SQL 字符串容易出错,并且不易于维护修改
  2. 使用字符串拼接 SQL,容易受到 SQL 注入攻击需要特别注意防范
  3. 编译期不能捕获类型错误,需要在运行时才能发现类型错误。

综上推荐使用 LambdaQueryWrapper(此外,LambdaQueryWrapper 还具有良好的兼容性和扩展性,可以轻松适应不同的业务需求,提高开发效率和代码质量)。

案例

简单查询

LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();wrapper.eq(User::getUsername, "张三")        .and(w -> w.between(User::getAge, 18, 30)                .or().eq(User::getGender, 1))        .orderByDesc(User::getCreateTime);List<User> userList = userMapper.selectList(wrapper);

首先创建了一个 LambdaQueryWrapper 对象,然后通过 eq 方法添加一个等于条件,表示查询用户名为“张三”的用户。接着,使用 and 方法添加一个条件组,该组包含了一个 between 条件和一个 or 条件,分别表示查询年龄在 18 到 30 之间的用户,或者查询性别为 1 的用户。注意,条件组中的多个条件之间默认是 and 的关系,可以通过 or 方法切换为 or 的关系。最后,使用 orderByDesc 方法对查询结果进行排序,按照创建时间倒序排列。

使用 LambdaQueryWrapper 进行查询时,还可以通过 select 方法来自定义查询字段,从而实现对查询结果的灵活控制。

select

LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();wrapper.eq(User::getAge, 20)        .select(User::getId, User::getUserName, User::getAge);List<User> userList = userMapper.selectList(wrapper);

首先通过 LambdaQueryWrapper 对象创建了一个查询条件,然后使用 eq 方法添加了一个等于条件,表示查询年龄为 20 的用户。接着,通过 select 方法来自定义查询字段,只查询 id、username、age 三个字段,这些字段是以逗号分隔的字符串形式传入的。最后,调用 selectList 方法执行查询操作,得到查询结果。

来源地址:https://blog.csdn.net/weixin_43874301/article/details/129612189

--结束END--

本文标题: 【Java】Mybatis Plus LambdaQueryWrapper梳理

本文链接: https://www.lsjlt.com/news/383453.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作