在使用spring+mybatis进行应用开发时,使用了mybatis的动态SQL,添加动态查询语句:
<select id="getSpasDataLogList" resultType="com.xxx.xxx.xxxBean" resultMap="spasDataLogMap"> <![CDATA[ select * from t_table where datetime > #to_DATE(#{startDate}, 'yyyy-mm-dd') <if test="datafrom!= null and datafrom!= ''"> AND a.datafrom like #{datafrom} </if> ]]> </select>
添加动态查询语句:
<if test="datafrom!= null and datafrom!= ''"> AND a.datafrom like #{datafrom} </if>
报java.sql.SQLException: ORA-00907: 缺失右括号 错误。去除
<if test="datafrom!= null and datafrom!= ''"> AND a.datafrom like #{datafrom} </if>
后可以正常执行,原来添加
<![CDATA[ ]]>
后解析器不对它进行解析<if>不会当mybatis的标签解析,而是以大于符号和小于符号进行解析,所以报错。去除
<![CDATA[ ]]>
但是,去除<![CDATA[ ]]> 后,发现
datetime > #to_DATE(#{startDate}, 'yyyy-mm-dd')
又报错,需要对大于符号进行转义,修改成:
datetime > #to_DATE(#{startDate}, 'yyyy-mm-dd')
问题解决。
转义表:
> | > | 大于 |
< | < | 小于 |
& | & | 和 |
>= | >= | 大于等于 |
<= | <= | 小于等于 |