mybatis 中的 if 条件 test
今天朋友问了一个问题,说MyBatis中怎么将 * 转义,当时心想直接用 <![CDATA[ ]]> 就ok了,后来发出代码原来是想将 if 条件中 test 的内容写成 * ,直接看代码:
<if test='param != "*"'>
index_code_${param}
</if>
说是第一行会报错,认为是转义问题。
其实这里并非转义问题,在标签 <if test=""> </if> 中的内容,MyBatis是使用的OGNL表达式来进行解析的,这个地方有一个坑需要注意下,单引号内有一个字符的情况下,OGNL会将其以 java 中的 char 类型进行解析,那么此时 char 类型与参数 String 类型用等号进行比较的时候结果都是false。解决方案也很简单,就是讲 test 中的单个字符用双引号括起来。
解决方案如下:
<if test="param != '*'">
index_code_${param}
</if>
另外,MyBatis的if、when里面的test表达式对参数进行判断时,可以调用java的java.lang.String中定义的方法。例如:
<if test='param != "*"'>
<choose>
<when test='param.indexOf("sub") != -1'>
</when>
<otherwise>
</otherwise>
</choose>
</if>
然后在说下 <![CDATA[ ]]>
在使用 MyBatis 时我们 sql 是写在 xml 映射文件中,如果写的 sql 中有一些特殊的字符的话,在解析 xml 文件的时候会被转义,但我们不希望他被转义,所以我们要使用<![CDATA[ ]]>来解决。这是 XML 的语法,在 CDATA 内部的内容都会被解析器忽略。
还有就是 mybatis 中常用的几个需要转义的字符:
特殊字符 替代符号
& &
< <
> >
" "
' '
上一篇: 【题解】【模板】快速排序
推荐阅读
-
在PHP3中实现SESSION的功能(附、COOKIE函数库的使用:test_cookie.php3
-
mybatis中bind标签和concat的使用说明
-
springboot工程中各个层次的作用+springboot连接数据库的工具汇总+Mybatis的开发方式/语法
-
MySQL中什么是禁用唯一性检查?唯一性检查,唯一性约束条件,唯一性索引之间的区别是什么?
-
原理分析Java Mybatis中的Mapper
-
Eclipse中关于mybatis插件geneartor的使用和遇到的一些问题
-
使用Numpy对特征中的异常值进行替换及条件替换方式
-
Extjs gridpanel 中的checkbox(复选框)根据某行的条件不能选中的解决方法
-
织梦{ dede:listsql sql } 标签中怎么给sql 语句中的条件传入栏目ID的值,跪求大神指点....
-
sql话语中能否直接把截取的字符串当作where条件