簡體   English   中英

MyBatis復雜插入物

[英]MyBatis Complex Insert

我正在嘗試制作一條插入語句,該語句將允許我在一個塊中插入多個表,但沒有成功。 這是一個例子:

Java對象:

public class  Parent {
    String parentId;
    List<Child> children;
    ...getters and setters...
}

public class Child {
    String childId;
    List<Toy> toys;
    ...getters and setters...
}

public class Toy {
    String toyId;
    String color;
    ...getters and setters...
}

MySQL表

create table TOY (TOY_ID varchar(10), COLOR varchar(10), CHILD_ID varchar(10),
  primary key(TOY_ID), foreign key (CHILD_ID) references CHILD(CHILD_ID));

create table CHILD (CHILD_ID varchar(10), PARENT_ID varchar(10),
  primary key(CHILD_ID), foreign key (PARENT_ID) references PARENT(PARENT_ID));

create table PARENT (PARENT_ID varchar(10), primary key(PARENT_ID));

mapper.xml

<resultMap id="ToyResult" type="Toy">
    <id property="toyId" column="TOY_ID"/>
    <result property="color" column="COLOR"/>
</resultMap>

<resultMap id="ChildResult" type="Child">
    <id property="childId" column="CHILD_ID"/>
    <collection property="toys" ofType="Toy" resultMap="ToyResult"/>
</resultMap>

<resultMap id="ParentResult" type="Parent">
    <id property="parentId" column="PARENT_ID"/>
    <collection property="children" ofType="Child" resultMap="childResult"/>
</resultMap>

我想知道是否可以進行如下插入映射:

<insert id="insertParentData" parameterType="Parent">
    insert into PARENT(PARENT_ID) values(#{parentId});

    insert into CHILD(CHILD_ID, PARENT_ID) values
      <foreach collection="children" item="childItem" index="index0" separator=",">
        (#{childItem.childId}, #{parentId})
      </foreach>;

    insert into TOY(TOY_ID, COLOR, CHILD_ID) values
      <foreach collection="children" item="childItem" index="index0" separator=",">
          <foreach collection="childItem.toys" item="toyItem" index="index1" separator=",">
            (#{toyItem.toyId}, #{toyItem.color}, #{childItem.childId})
        </foreach>
      </foreach>
</insert>

我收到一條錯誤消息,說我的SQL語法有錯誤。 它指出insert into CHILD行中。

如果無法使用這種插入方法,您將如何建議我映射插入語句? 我可以創建ParentMapper,ChildMapper和ToyMapper xml文件,在我的“父數據訪問對象”中,我將有三個插入調用,每個調用都使用不同的映射器插入到不同的表中。

謝謝您的幫助。

每個查詢必須有一個元素。 也許您可以創建一個“ insertParent” java方法,在父項插入之后,為其子代調用一個“ insertChildren”方法,然后遞歸地調用一個“ insertToys”方法。

我通過將大插入分成三個單獨的插入並在我的DAO中調用它們來解決了這個問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM