OGNL表达式定义字符串常量 与单个字符常量使用问题

2021-12-24  本文已影响0人  赵优秀

错误写法:

<if test="m.flag == '0'">
                DISTINCT DATE_FORMAT(A.readdate, '%T') readdate
 </if>

正确写法1: 单引号转双引号

<if test='m.flag == "0" '>
                DISTINCT DATE_FORMAT(A.readdate, '%T') readdate
 </if>

正确写法2: toString()

<if test="m.flag == '0'.toString()">
                DISTINCT DATE_FORMAT(A.readdate, '%T') readdate
 </if>

原因:

mybatis是用OGNL表达式来解析的,在OGNL的表达式中,单引号里单个字符会被解析成char类型(多个字符是可以的),java是强类型的,char 和一个string 会导致不等

OGNL表达式相关的知识点:

OGNL的全称是Object Graph Navigation Language(对象图导航语言),它是一种强大的表达式语言,让你通过简单一致的表达式语法来读取和设置Java对象的属性值,调用对象的方法,遍历整个对象的结构图,实现字段类型转换等功能。

OGNL支持的所有常量类型:

1、字符串常量:
以单引号或双引号括起来的字符串。如”hello”,’hello’。
注意,如果是单个字符的字符串常量,必须使用双引号。
2、字符常量:
以单引号括起来的字符。如’a'。
3、数值常量:
除了Java中的int、long、float和double外,OGNL还让你使用“b”或“B”后缀指定BigDecimal常量,用“h”“H”后缀指定BigInteger常量。
4、布尔常量:
true和false。
5、null常量。

上一篇下一篇

猜你喜欢

热点阅读