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
可以通过将 <(小于)替换为 <
来解决上述问题,如下所示。
<script>
SELECT * FROM STUDENT
WHERE DEPARTMENT_ID = #{depId}
<if test='joiningDate != null'> AND STUDENT_ID <= #{joiningDate} </if>
</script>
我也遇到了在我还没有尝试过的受人尊敬的场景中使用 CDATA 或 ^ 的建议。
问题:
- 我的问题是这个问题不应该由 Mybatis 团队解决(至少 xml 经常使用的查询标签的特定转换)或者这种行为是预期的,因为我们正在使用
<script>
标记 ??
- 有没有我错过的替代解决方案?
公平地说,这不是 MyBatis
中的问题,而是 XML 解析的行为。
如果不希望<
和&
等字符被解析,可以使用术语CDATA
来阻止XML解析器解析这样的文字。详情请参考http://www.w3schools.com/xml/xml_cdata.asp。或者您可以使用 <
作为评论转义它。
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 >= #{joiningDate}
]]>
</if>
</script>
我正在使用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
可以通过将 <(小于)替换为 <
来解决上述问题,如下所示。
<script>
SELECT * FROM STUDENT
WHERE DEPARTMENT_ID = #{depId}
<if test='joiningDate != null'> AND STUDENT_ID <= #{joiningDate} </if>
</script>
我也遇到了在我还没有尝试过的受人尊敬的场景中使用 CDATA 或 ^ 的建议。
问题:
- 我的问题是这个问题不应该由 Mybatis 团队解决(至少 xml 经常使用的查询标签的特定转换)或者这种行为是预期的,因为我们正在使用
<script>
标记 ?? - 有没有我错过的替代解决方案?
公平地说,这不是 MyBatis
中的问题,而是 XML 解析的行为。
如果不希望<
和&
等字符被解析,可以使用术语CDATA
来阻止XML解析器解析这样的文字。详情请参考http://www.w3schools.com/xml/xml_cdata.asp。或者您可以使用 <
作为评论转义它。
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 >= #{joiningDate}
]]>
</if>
</script>