MyBatis:在'foreach'中添加'bind'时出错

时间:2015-10-28 09:13:41

标签: mybatis dtd

我正在使用MyBatis来处理SQL查询。这是我有问题的代码:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.foo.Foo">
    ...
    <insert id="insert" parameterType="com.foo.FooParam">
        <foreach collection="bars" item="bar" separator=" ">
            <bind name="inFavorites" value="bar.sectionId == '_favorites'" />
            <foreach collection="bar.bars2" item="bar2" index="index" separator=" ">
               ...
            </foreach>
        </foreach>
     </insert>
    ...
</mapper>

Intelij在验证xml时显示以下错误:

  

错误:(24,74)必须声明元素类型“bind”。

     

错误:(28,19)元素类型“foreach”的内容必须匹配“(include | trim | where | set | foreach | choose | if)”。

当我将编译模块作为osgi包放入jetty服务器(mvn编译它没有错误和警告)时,我收到以下错误:

  

lineNumber:28; columnNumber:19;元素类型“foreach”的内容   必须匹配“(include | trim | where | set | foreach | choose | if)”。

好的,我明白了。我无法在'foreach'中添加'bind'元素。

但是,如果http://mybatis.org/dtd/mybatis-3-mapper.dtd另有说法,为什么呢?

<!ELEMENT foreach (#PCDATA | include | trim | where | set | foreach | choose | if | bind)*>

1 个答案:

答案 0 :(得分:0)

version 3.2.3以来,bind内的foreach被允许。您显然使用的是旧版本。

dtd文件不是从互联网上下载的,而是使用了mybatis jar中打包的版本。