为什么MyBatis XML配置中的这个不正确的“包”标签有效?

时间:2016-01-28 11:34:35

标签: java eclipse mybatis dtd

通常我们在XML文件中定义查询,MyBatis XML配置的mappers部分如下所示:

<mappers>
    <mapper resource="mappers/example1.xml"/>
    <mapper resource="mappers/example2.xml"/>
</mappers>

一切都很好。

现在一个贡献者添加了一些映射器作为java类,我们有一个混合配置,其中xml文件和java包都列在mappers中:

<mappers>
    <mapper resource="mappers/example1.xml"/>
    <mapper resource="mappers/example2.xml"/>
    <package name="it.example.mappers1" />
    <package name="it.example.mappers2" />
</mappers>

我发现文档类型定义http://ibatis.apache.org/dtd/ibatis-3-config.dtd不包含package作为mappers的正确内容,因此我被eclipse告知,这给了我这个错误:

  

元素类型“mappers”的内容必须匹配“(mapper)+”

然而,当我运行应用程序时,一切仍然正常。另一方面,当我尝试删除不正确的package元素时,MyBatis不知道在哪里找到映射器,我得到了这个运行时错误:

  

org.apache.ibatis.binding.BindingException:键入interface   MapperRegistry不知道it.example.mappers1.MyMapper

所以我们有一个错误的配置,这是有效的,是必要的。为什么?我是否指定了错误的DTD?

1 个答案:

答案 0 :(得分:0)

我确实为ibatis指定了旧的DTD。如果我用正确的http://mybatis.org/dtd/mybatis-3-config.dtd替换,一切都会有效并且有效。够傻了