一、起因
使用Mybatis-Plus3.x版本时,普通的保存数据控制台报异常,大致如下:
Caused by: org.apache.ibatis.builder.BuilderException: Error evaluating expression 'shr ! = ''and shr !=null'. Cause: org.apache.ibatis.ognl.ExpressionSyntaxException: Malformed OGNL expression: 'shr ! = ''and shr !=null'[org.apache.ibatis.ognl.ParseException: Encountered " "shr"
Was expecting one of:
<EOF>
"," ...
"=" ...
"?" ...
"||" ...
"or" ...
"&&" ...
"and" ...
"shr" ...
二、思考
首先想的是自己业务代码以及数据库字段是否存在问题,仔细检查了一遍发现并没有问题。然后仔细观察异常,发现其中有个关键字shr
,全局搜索了下,正好是实体类字段shr(审核人)。因为是个5年前的项目,所以也没有吐槽数据库命名规范了。此时大致可以猜测问题出现在了这个字段上。
三、解决
查阅了相关文档,发现与shr
字段与mybatis的OGNL表达式发生冲突,因此这个坑是mybatis带来的。在网上察看了ognl表达式的setValue方法的源码后,总结了一下变量命名可能发生冲突的变量集合。
最终解决办法是修改实体类命名,修改实体类与数据库字段映射,mybatisPlus可直接使用@tableField(value="xxx")注解即可。
@TableField(value = "shr")
private String checker;