java - Mybatis : "less than" issue in Select annotations

标签 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>

在使用基于注释的 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>标记 ??
  • 有没有我错过的替代解决方案?

最佳答案

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

如果你不想要像<这样的字符和 &要解析,您可以使用术语 CDATA以防止 XML 解析器解析此类文本。请引用http://www.w3schools.com/xml/xml_cdata.asp详细信息。或者你可以使用 &lt 来逃避它作为评论。

即.

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

关于java - Mybatis : "less than" issue in Select annotations,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29092950/

相关文章:

java - 如何找出引用最多的类?

java - 具有不同主启动的同一项目的不同日志文件

spring - 为什么Springboot的JPA实体是抽象的?

java - 为什么不使用时不传递到 Mockito. 中?

java - 没有连接关系的Spring data jpa find()

java - 使用 mybatis 保存/更新集合,常见的做法是什么?

java - TextureAtlas 区域到 Texture

java - 调用MediaProjectionManager截图时,每次都会弹出截图权限框。如何设置取消?

java - Mybatis xml resultMap 存在集合和关联问题

java - 使用MyBatis调用oracle函数(基于注解)