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.触发原因查找过程分析:
依次选择 [指南->核心功能->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类也有了专门的介绍,详见: