evaluating expression ‘ew.sqlSegment != null and ew.sqlSegment != ‘‘ and ew. mybaties plus问题
2022-06-20 11:23:58
ew
.
sql
Segment
!=
null
and
ew
.
sql
Segment
!= '' and
ew
.nonEmptyOfNormal'. Cause: org.apache.ibatis.ognl.OgnlException:
sql
Segment
[
java
.lang.ExceptionInInitializerError
因为开发时,项目经理提到使用DTO建立与前台交互用实体,我着手了解一下,然后现学现用。
至于DTO是什么我这里就不多做赘述,因为我自己理解都不是很清楚,生怕误人子弟。
下面记录一下,我使用DTO都做了一些什么。
我理解的DTO 和 VO 其实没多大区别,所以我直接使用VO给我的DTO类做后缀名。
然后这些类里面就放一些前端需要的字段,像什么delfFlag、createUser、createTi...
(看文章之前要排除,自身的代码bug,本文是在本身代码没
问题
的基础上,依赖包版本过低导致的)
先上错误和描述,使用的mybatisplus插件,开始用的是3.1.1版本,然后本地运行项目没有
问题
,之前将项目打包成war包,也没
问题
,可以在服务器上正常运行。
但是要求,将项目打包成jar包,本地没有
问题
,使用项目分离的形式进行打包,并且在服务器上运行的时候,在使用到lambda表达式的代码报错,如下:
org.mybatis.spring.MyBatisSystemException: nested exc
Caused by: org.apache.ibatis.builder.BuilderException: Error
eval
ua
ting
expression
'
ew
.
sql
Segment
!=
null
'. Cause: org.apache.ibatis.ognl.OgnlException:
sql
Segment
[com.baomidou.mybatisplus.core.exceptions.MybatisPlusException: not support this colu
@Test
void selectLambda() {
LambdaQueryWrapper<User> queryWrapper = n
ew
LambdaQueryWrapper<>();
queryWrapper.like(User :: getName, "W")
Caused by: org.apache.ibatis.builder.BuilderException: Error
eval
ua
ting
expression
'
ew
.
sql
Segment
!=
null
and
ew
.
sql
Segment
!= '' and
ew
.nonEmptyOfNormal'. Cause: org.apache.ibatis.ognl.OgnlException:
sql
Segment
[
java
.lang.
Null
PointerException]
真得吐槽一下,mybatis就不能把这个错报成 column 'xxx' is not exist 吗。发现了Mybatis一个很不直观的错误,从字面上根本看不出哪里有
问题
。可以看到这是一个虚拟字段,并不存在于表中,用它来做条件肯定有
问题
。只能看出是空指针,于是我用断点跟踪我传的条件,发现全部都有值。于是把这个条件去掉之后,顺利解决
问题
。请看看我的查询条件怎么写的。
一文解决
SQL
查询中关于
NULL
的陷阱
NULL
值处理是应用开发人员最容易出错误的地方,主要的原因是大家习惯使用二元的布尔逻辑来思考判断,而数据库对于
NULL
值的处理逻辑是三值逻辑。事实上,数据库优化器中缺陷最多的其实也是和
NULL
值处理相关的逻辑。即使是有着几十年历史的DB2/Teradata等成熟的数据库软件,仍然有超过20%的缺陷和
NULL
处理相关。
本文深度解析
NULL
值陷阱出现的根本原因,总结了简单有效的判断逻辑;同时针对日常开发中四种常见陷阱,解释其适用条件及解决方案;最后介绍了Paw
SQL
A