美文网首页
shr关键字导致mybatis的OGNL表达式异常

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

作者: 不二不二熊 | 来源:发表于2019-08-26 22:39 被阅读0次
    一、起因

    使用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;
    

    相关文章

      网友评论

          本文标题:shr关键字导致mybatis的OGNL表达式异常

          本文链接:https://www.haomeiwen.com/subject/crsjectx.html