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
Выше проблема может быть исправлена путем замены <(меньше, чем) с <
как показано ниже.
<script>
SELECT * FROM STUDENT
WHERE DEPARTMENT_ID = #{depId}
<if test='joiningDate != null'> AND STUDENT_ID <= #{joiningDate} </if>
</script>
Я также натолкнулся на предложение использовать CDATA или ^ в уважаемых сценариях, которые я еще не пробовал.
Вопрос:
- Мой вопрос заключается в том, не должна ли эта проблема быть исправлена командой Mybatis (по крайней мере, специфичное для xml преобразование для часто используемых тегов запросов), или это поведение соответствует ожидаемому, поскольку мы используем
<script>
тег?? - Есть ли альтернативное решение, которое я пропустил?
1 ответ
Чтобы быть справедливым, это не проблема в MyBatis
, но поведение разбора XML.
Если вы не хотите, чтобы такие символы, как <
а также &
чтобы быть проанализированным, вы можете использовать термин CDATA
чтобы предотвратить синтаксический анализатор XML для анализа такого текста. Пожалуйста, обратитесь к http://www.w3schools.com/xml/xml_cdata.asp для подробностей. Или вы можете избежать этого с <
в качестве комментариев.
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 >= #{joiningDate}
]]>
</if>
</script>