解决SpringBoot搭建MyBatisPlus中selectList遇到LambdaQueryWrapper报错问题

 更新时间:2024年01月23日 16:15:34   作者:MartinRY  
这篇文章主要介绍了解决SpringBoot搭建MyBatisPlus中selectList遇到LambdaQueryWrapper报错问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

SpringBoot搭建MyBatisPlus中selectList遇到LambdaQueryWrapper报错

在3.4.4版本中

<dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.4.3</version>
        </dependency>

在下面代码中,bookDao.selectList(lqw) 会报错

String name = "Spring";
        LambdaQueryWrapper<Book> lqw = new LambdaQueryWrapper<Book>();
        lqw.like(name != null,Book::getName,name);
        bookDao.selectList(lqw);

org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.builder.BuilderException: Error evaluating expression 'ew.sqlSegment != null and ew.sqlSegment != '' and ew.nonEmptyOfWhere'. Cause: org.apache.ibatis.ognl.OgnlException: sqlSegment [java.lang.ExceptionInInitializerError]

但是在升级版本(3.5.1)后,则可以解决该问题

mybatisPlus LambdaQueryWrapper.select报错避坑

mybatisPlus 中LambdaQueryWrapper 的 select 方法只能调用一次,如果调用第二次就会覆盖第一次

比如,我有一个 user 表,我只想查询里面的 id 和name 字段。

错误示范

LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
wrapper.select(User::getId);
wrapper.select(User::getName);
List<User> users = subCompanyMapper.selectList(wrapper);

这样子查询出来的 users 中只会有 name 字段,id 字段为 null,是因为第二次调用 select 把第一次调用覆盖掉了。

正确的写法

LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
wrapper.select(User::getId, User::getName);
List<User> users = subCompanyMapper.selectList(wrapper);

这样查询出来的 users 就只会有 id 和 name 字段了。 QueryWrapper 也是同理

总结

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

相关文章

  • Idea jdk版本问题解决方案

    Idea jdk版本问题解决方案

    这篇文章主要介绍了Idea jdk版本问题解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • Springboot 整合 Java DL4J 打造文本摘要生成系统

    Springboot 整合 Java DL4J 打造文本摘要生成系统

    本文介绍了如何使用SpringBoot整合JavaDeeplearning4j构建文本摘要生成系统,该系统能够自动从长篇文本中提取关键信息,生成简洁的摘要,帮助用户快速了解文本的主要内容,技术实现包括使用LSTM神经网络进行模型构建和训练,并通过SpringBoot集成RESTfulAPI接口
    2024-11-11
  • 详解Java Project项目打包成jar,并生成exe文件

    详解Java Project项目打包成jar,并生成exe文件

    本篇文章主要介绍了Java Project项目打包成jar,并生成exe文件,非常具有实用价值,有兴趣的可以了解一下。
    2017-01-01
  • java中lambda表达式语法说明

    java中lambda表达式语法说明

    “Lambda 表达式”(lambda expression)是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda abstraction),是一个匿名函数,即没有函数名的函数。Lambda表达式可以表示闭包(注意和数学传统意义上的不同)。
    2016-09-09
  • Java实现生成Excel树形表头完整代码示例

    Java实现生成Excel树形表头完整代码示例

    这篇文章主要介绍了Java实现生成Excel树形表头完整代码示例,具有一定借鉴价值,需要的朋友可以参考下。
    2017-12-12
  • Java 在游戏中探索数组二维数组

    Java 在游戏中探索数组二维数组

    数组和二维数组感觉用王者荣耀的装备栏来举例解释,应该更易懂一些。从基础开始讲,后续会讲到JAVA高级,中间会穿插面试题和项目实战,希望能给大家带来帮助
    2022-03-03
  • Java synchronized最细讲解

    Java synchronized最细讲解

    synchronized是Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码。本文给大家介绍java中 synchronized的用法,对本文感兴趣的朋友一起看看吧
    2021-09-09
  • 使用@Cacheable注解Redis时Redis宕机或其他原因连不上继续调用原方法的解决方案

    使用@Cacheable注解Redis时Redis宕机或其他原因连不上继续调用原方法的解决方案

    在Spring Boot应用中,我们经常使用​​@Cacheable​​注解来缓存数据,以提高应用的性能,本文将探讨如何在Redis不可用时,让​​@Cacheable​​注解继续调用原方法,确保服务的可用性和稳定性,感兴趣的朋友一起看看吧
    2025-05-05
  • Java流程控制语句最全汇总(中篇)

    Java流程控制语句最全汇总(中篇)

    这篇文章主要介绍了Java流程控制语句最全汇总(中篇),本文章内容详细,通过案例可以更好的理解数组的相关知识,本模块分为了三部分,本次为中篇,需要的朋友可以参考下
    2023-01-01
  • Java的静态方法Arrays.asList()使用指南

    Java的静态方法Arrays.asList()使用指南

    Arrays.asList() 是一个 Java 的静态方法,它可以把一个数组或者多个参数转换成一个 List 集合,这个方法可以作为数组和集合之间的桥梁,方便我们使用集合的一些方法和特性,本文将介绍 Arrays.asList() 的语法、应用场景、坑点和总结
    2023-09-09

最新评论