解决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 也是同理
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
Springboot 整合 Java DL4J 打造文本摘要生成系统
本文介绍了如何使用SpringBoot整合JavaDeeplearning4j构建文本摘要生成系统,该系统能够自动从长篇文本中提取关键信息,生成简洁的摘要,帮助用户快速了解文本的主要内容,技术实现包括使用LSTM神经网络进行模型构建和训练,并通过SpringBoot集成RESTfulAPI接口2024-11-11
详解Java Project项目打包成jar,并生成exe文件
本篇文章主要介绍了Java Project项目打包成jar,并生成exe文件,非常具有实用价值,有兴趣的可以了解一下。2017-01-01
使用@Cacheable注解Redis时Redis宕机或其他原因连不上继续调用原方法的解决方案
在Spring Boot应用中,我们经常使用@Cacheable注解来缓存数据,以提高应用的性能,本文将探讨如何在Redis不可用时,让@Cacheable注解继续调用原方法,确保服务的可用性和稳定性,感兴趣的朋友一起看看吧2025-05-05


最新评论