zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    使用FluentScheduler和IIS预加载在asp.net中实现定时任务管理
    [WCF REST] Web消息主体风格(Message Body Style)
    [WCF REST] Web消息主体风格(Message Body Style)
    REST WCF Service中的WebMessageBodyStyle
    REST WCF Service中的WebMessageBodyStyle
    C#表示空字符
    053517
    053516
    053515
    053514
  • 原文地址:https://www.cnblogs.com/ringbug/p/15347733.html
Copyright © 2011-2022 走看看