MybatisPlusException: can not use this method for “getSqlFirst“

1.环境说明:

mybatis-plus-boot-starter: 3.3.2

2.异常位置:

10:23:09.492 | http-nio-80-exec-1 | ERROR | o.a.c.c.C.[.[.[.[dispatcherServlet] -> Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.builder.BuilderException: Error evaluating expression 'ew != null and ew.sqlFirst != null'. Cause: org.apache.ibatis.ognl.OgnlException: sqlFirst [com.baomidou.mybatisplus.core.exceptions.MybatisPlusException: can not use this method for "getSqlFirst"]] with root cause  
com.baomidou.mybatisplus.core.exceptions.MybatisPlusException: can not use this method for "getSqlFirst"
	at com.baomidou.mybatisplus.core.toolkit.ExceptionUtils.mpe(ExceptionUtils.java:49)
        ...

3.触发异常的代码:

LambdaQueryChainWrapper<LibInfo> lq = this.lambdaQuery();
int sum = lq.orderByAsc(LibInfo::getLibOrder).count();

4.解决办法:

LambdaQueryWrapper<LibInfo> lq = Wrappers.lambdaQuery();
int sum = lq.orderByAsc(LibInfo::getLibOrder).count();

5.触发原因查找过程分析:

首先到mybatisPlus官网

依次选择 [指南->核心功能->CRUD接口]

可以看到里面需要的都是Wrapper<T>接口类型实现类的参数.
但里面通篇都没有讲如何获取这个Wrapper类型

接下来我们进入[指南->核心功能->条件构造器]

从头读到尾后发现官方给出的构建方式只有一行

mysqlMapper.getAll(Wrappers.<MysqlData>lambdaQuery().eq(MysqlData::getGroup, 1));

这里面用到的就是解决方案里面的查询方法参数

6. this.lambdaUpdate()方法和this.lambdaQuery()方法是做什么的?

这两个方法的返回值是LambdaUpdateChainWrapper和LambdaQueryChainWrapper类型(都有Chain字符串)

再结合 [指南->核心功能->CRUD接口]里面的[Chain]小节,可以推断他们是用来链式查询并修改和删除的(以下是原文):

// 链式查询 普通
QueryChainWrapper<T> query();
// 链式查询 lambda 式。注意:不支持 Kotlin
LambdaQueryChainWrapper<T> lambdaQuery(); 

// 示例:
query().eq("column", value).one();
lambdaQuery().eq(Entity::getId, value).list();

// 链式更改 普通
UpdateChainWrapper<T> update();
// 链式更改 lambda 式。注意:不支持 Kotlin 
LambdaUpdateChainWrapper<T> lambdaUpdate();

// 示例:
update().eq("column", value).remove();
lambdaUpdate().eq(Entity::getId, value).update(entity);

7.导致开发者迷惑的是Wrappers类没有单独讲解

官方的坑,最坑爹

------------ 2024-04-25 日更新 ----------

进入官网[问答], 然后使用浏览器的 Ctrl+f 全局搜索关键词: wrappers 里面也有部分调用示例可以参考

------------ 2024-06-17 日更新 ----------

苞米豆的 mybatis-plus 官网页面更新了, 新的页面结构看上去更舒适了. 关于wrappers类也有了专门的介绍,详见:

条件构造器 | MyBatis-Plus (baomidou.com)

  • 12
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值