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

Om.*_*Om. 3 java spring mybatis

我使用的是java7,spring 3和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>
Run Code Online (Sandbox Code Playgroud)

虽然使用基于注释的Select我遇到了一个奇怪的问题,其中下面提到的代码由于使用<(Less then)而抛出异常而while(大于)按预期工作.

<script>
SELECT * FROM STUDENT
WHERE DEPARTMENT_ID = #{depId}
<if test='joiningDate != null'> AND STUDENT_ID <= #{joiningDate} </if>
</script>
Run Code Online (Sandbox Code Playgroud)

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

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

上面的问题可以通过替换<(less then)来解决&lt;,如下所示.

<script>
SELECT * FROM STUDENT
WHERE DEPARTMENT_ID = #{depId}
<if test='joiningDate != null'> AND STUDENT_ID &lt;= #{joiningDate} </if>
</script>
Run Code Online (Sandbox Code Playgroud)

我也遇到了在我所未尝试过的受尊重场景中使用CDATA或^的建议.

题:

  • 我的问题是Mybatis团队不应该解决这个问题(对于经常使用的查询标签至少是xml特定的转换),或者这种行为是预期的,因为我们使用<script>标签?
  • 有没有我错过的替代解决方案?

Lan*_*dys 24

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

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

IE

<script>
SELECT * FROM STUDENT
WHERE DEPARTMENT_ID = #{depId}
<if test='joiningDate != null'> 
<![CDATA[
AND STUDENT_ID <= #{joiningDate} 
]]>
</if>
</script>
Run Code Online (Sandbox Code Playgroud)