java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > SpringBoot搭建MyBatisPlus中selectList遇到LambdaQueryWrapper报错

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

作者: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 也是同理

总结

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

您可能感兴趣的文章:
阅读全文