开发手记:MyBatis的mapper文件的中SQL符号转义

发布时间 2023-05-29 22:37:39作者: YaosGHC

字符转义问题

在 MaBatis 的 XML 文件中编写SQL语句时,<符号会出现转义问题,例如:

<!--查询指定月份内的订单-->
<select id="queryInRange" resultType="OrderEntity">
		SELECT * FROM order
		WHERE create_time > DATE_SUB(NOW(), INTERVAL #{month} MONTH)
		AND user_id = #{id};
	</select>

会出现这种问题的原因是:<会与构成 XML 标签的<>解析冲突

解决方案

  1. 通过转义符

    原符号 < <= > >= & ' "
    替换符号 &lt; &lt;= &gt; &gt;= &amp; &apos; &quot;
  2. 通过CDATA

    CDATA(Character Data)块是 XML 的一种语法结构,不是 MyBatis 特有的。它用于将文本数据视为纯文本,而不进行 XML 解析。

    	<select id="queryInRange" resultType="OrderEntity">
    		SELECT * FROM order
    		WHERE create_time <![CDATA[>]]> DATE_SUB(NOW(), INTERVAL #{month} MONTH)
    		AND user_id = #{id};
    	</select>