Mybatis:选择注释中的“小于”问题

2022-09-03 17:21:38

我正在使用java7,spring 3和mybatis

啪.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特定转换),或者这种行为符合预期,因为我们正在使用标签?<script>
  • 是否有任何替代解决方案,我错过了?

答案 1

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

如果不希望对诸如 和 之类的字符进行分析,则可以使用该术语来防止 XML 分析器分析此类文本。有关详细信息,请参阅 http://www.w3schools.com/xml/xml_cdata.asp。或者你可以用注释来逃避它。<&CDATA&lt

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

答案 2

你也可以使用它。

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

= 大于

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

推荐