Java 使用MyBatis和XML进行继承

Java 使用MyBatis和XML进行继承,java,mybatis,ibatis,Java,Mybatis,Ibatis,所以我让MyBatis继承与注释一起工作-子继承@Select功能。 但是对于XML文件,它不能相应地工作。 它将抛出: org.apache.ibatis.binding.BindingException:无效的绑定语句/../ 看到一些人在映射器元素上使用了扩展,但对我来说它说“这里不允许属性扩展” 在父对象上尝试了,在子对象上尝试了,但引发了org.apache.ibatis.builder.IncomplementElement异常:命名空间“父对象”没有缓存 那么如何让MyBatis继

所以我让MyBatis继承与注释一起工作-子继承
@Select
功能。 但是对于XML文件,它不能相应地工作。 它将抛出:
org.apache.ibatis.binding.BindingException:无效的绑定语句/../

看到一些人在
映射器
元素上使用了
扩展
,但对我来说它说
“这里不允许属性扩展”

在父对象上尝试了
,在子对象上尝试了
,但引发了
org.apache.ibatis.builder.IncomplementElement异常:命名空间“父对象”没有缓存

那么如何让MyBatis继承使用XML配置呢?

属性扩展仅适用于resultMap

cache和cache ref是关于缓存管理的

所有看起来像扩展的东西实际上都是分解:在XML映射器中定义sql片段,并在其他映射器中引用它们。例如:

-Mapper1.xml:

<sql id="a">/* dummy will never actually been included */</sql>
<sql id="b"> something common to include </sql>
<sql id="template">
    <include refid="a" />
    <include refid="Mapper1.b" />
</sql>

诀窍是使用前缀或未引用的片段。它可能看起来像是重写。

我同意whit balckwizzard cache和cache ref在这种情况下没有用处(我也在某个地方读过一篇文章,建议使用它们来扩展xml,但我认为战后是一个错误)

我提出了一个我认为对你也有好处的答案:

问候

<sql id="a"> something specific to this mapper </sql>
<select id="statement">
    <include refid="Mapper1.template" />
</select>
something specific to this mapper
something common to include