如何重用MyBatis映射器?

时间:2014-11-04 06:47:12

标签: mybatis

我们说有两张桌子。一个是父母,另一个是孩子。

我为每个表都有sql mappers。

如何在父母的映射器中使用子级的sql映射器?

我的意思是我想实施ON DELETE CASCADE。遗憾的是,我的数据库并不支持该功能。

在我的孩子映射器中,我有......

<delete id="deleteChildren" ...>
    DELETE FROM CHILD WHERE PARENT_ID = #{parentId}
</delete>

在我的父映射器中,我只想

<delete id="deleteParent" ...>
    <!-- call `deleteChildren` here -->
    <!-- ant then delete the parent -->
    DELETE FROM PARENT WHERE ID = #{id}
</delete>

1 个答案:

答案 0 :(得分:1)

您可以只在一个片段中运行两个查询,并使用include重用其他片段。但SQL语法取决于您的数据库。

在MySQL中:

<delete id="deleteParent" ...>
    <include refid="Child.deleteChildren" />;
    DELETE FROM PARENT WHERE ID = #{id};
</delete>

在MS-SQL中:

<delete id="deleteParent" ...>
    <include refid="Child.deleteChildren" />
    GO
    DELETE FROM PARENT WHERE ID = #{id}
</delete>