Mybatis:"less than" 问题在 Select 注释中

Mybatis : "less than" issue in Select annotations

我正在使用java7、spring3和mybatis

Pom.xml

<org.mybatis-version>3.2.8</org.mybatis-version>
<org.mybatis-spring-version>1.2.2</org.mybatis-spring-version>

<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>${org.mybatis-version}</version>
</dependency>
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis-spring</artifactId>
    <version>${org.mybatis-spring-version}</version>
</dependency>

在使用基于注释的 Select 时,我遇到了一个奇怪的问题,下面提到的代码由于使用 <(小于)而 >(大于)按预期工作而抛出异常。

<script>
SELECT * FROM STUDENT
WHERE DEPARTMENT_ID = #{depId}
<if test='joiningDate != null'> AND STUDENT_ID <= #{joiningDate} </if>
</script>

谷歌搜索一段时间后,我发现了下面报告的这个问题。

https://code.google.com/p/mybatis/issues/detail?id=787

可以通过将 <(小于)替换为 &lt; 来解决上述问题,如下所示。

<script>
SELECT * FROM STUDENT
WHERE DEPARTMENT_ID = #{depId}
<if test='joiningDate != null'> AND STUDENT_ID &lt;= #{joiningDate} </if>
</script>

我也遇到了在我还没有尝试过的受人尊敬的场景中使用 CDATA 或 ^ 的建议。

问题:

公平地说,这不是 MyBatis 中的问题,而是 XML 解析的行为。

如果不希望<&等字符被解析,可以使用术语CDATA来阻止XML解析器解析这样的文字。详情请参考http://www.w3schools.com/xml/xml_cdata.asp。或者您可以使用 &lt 作为评论转义它。

I.E.

<script>
SELECT * FROM STUDENT
WHERE DEPARTMENT_ID = #{depId}
<if test='joiningDate != null'> 
<![CDATA[
AND STUDENT_ID <= #{joiningDate} 
]]>
</if>
</script>

你也可以使用它。

<= 小于或等于 SELECT * 来自学生 其中 DEPARTMENT_ID = #{depId}

= greater that

<script>
SELECT * FROM STUDENT
WHERE DEPARTMENT_ID = #{depId}
<if test='joiningDate != null'> 
<![CDATA[
AND STUDENT_ID &gt;= #{joiningDate} 
]]>
</if>
</script>