如何在mybatis中重用< insert>标记?

htrmnn0y  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(370)

我正在用参数(a)在数据库中插入对象a。像这样的物体

A {
   List<B> b;
   List<C> c;
}

在mapper文件中,我使用以下函数:

void register(@Param("a")A a);

在mapper.xml中,我编写了以下代码:

<insert id="registerB" parameterType="java.util.List">
    <foreach>...</foreach>
</insert>

<insert id="registerC" parameterType="java.util.List">
    <foreach>...</foreach>
</insert>

<insert id="register">
//TODO include insert registerB and registerC
</insert>

如何在a的insert查询中插入b和c的列表?

qpgpyjmq

qpgpyjmq1#

不能在中轻松重用insert sql片段 mapper.xml . 问题不在于sql字符串本身,这是可以做到的(比如这里描述的)。
问题在于引用参数。插入 registerB 例如,参数是 B s。你不能重新定义它来方便的使用它们 register .
但是,您可以使用java8默认方法来重用 registerB 以及 registerC 来自如下java代码:

interface MyMapper {
   void registerB(@Param("b")B b);

   void registerC(@Param("c")C c);

   default void register(@Param("a")A a) {
       registerB(a.getB());
       registerC(a.getC());
   }
}

相关问题