Mybatis: проблема "меньше чем" в избранных аннотациях

Я использую java7, весна 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>

При использовании выбора, основанного на аннотациях, я столкнулся со странной проблемой, из-за которой нижеприведенный код выдавал исключение из-за использования <(Меньше), в то время как> (больше, чем) работает как ожидалось.

<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 ответ

Решение

Чтобы быть справедливым, это не проблема в 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>

Вы тоже можете это использовать.

<= меньше или равно SELECT * FROM STUDENT WHERE DEPARTMENT_ID = #{depId}

= больше, чем

<script>
SELECT * FROM STUDENT
WHERE DEPARTMENT_ID = #{depId}
<if test='joiningDate != null'> 
<![CDATA[
AND STUDENT_ID &gt;= #{joiningDate} 
]]>
</if>
</script>
Другие вопросы по тегам