错误写法:
<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常量。
网友评论