shr关键字导致mybatis的OGNL表达式异常

一、起因

使用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方法的源码后,总结了一下变量命名可能发生冲突的变量集合。

img

对照表

最终解决办法是修改实体类命名,修改实体类与数据库字段映射,mybatisPlus可直接使用@tableField(value="xxx")注解即可。

   @TableField(value = "shr")
    private String checker;

原文出自【简书】:https://www.jianshu.com/p/f3c5d904b2a0

原文地址:https://www.cnblogs.com/ringbug/p/15347733.html