Search code examples
collectionsinsertormibatismybatis

How do I insert collection of objects using MyBatis 3.x?


I'm a beginner with MyBatis.

I just want to know how to insert a collection of objects from an instance of a class. Say I have a class User related to a Note in one-to-many relationship. I just like to mention that I built my schema using JPA 2 annotations via Hibernate's hbm2ddl. I'll add the key JPA annotations I used in the sample code below.

Here's a sample:

@Entity
public class User {
    ...
    @OneToMany
    @JoinColumn(name="user")
    public List<Note> getNotes() {...}
    ...
}

Now, everytime I insert something into User table I have to insert instances into the Note table if the list is not empty. Take note of the @JoinColumn in Note table which should have the id of the inserted User, which I have set to be autogenerated.

Has anyone got something like this working? Thanks.


Solution

  • When using a regular MyBatis XML mapping config you can use something like this:

    Java classes:

    class EnclosingType {
      private List<ElementType> elements;
    }
    
    class ElementType {
      String a;
      String b;
      (...)
    }
    

    Mapper xml:

    <mapper
        namespace="my.example.ElementType">
        <insert id="insertElements" parameterType="EnlosingType">
            INSERT INTO ELEMENTTYPE (enclosingTypeId, column_a, column_b)
            VALUES
            <foreach item="element" index="index" collection="elements"
                open="(" separator="),(" close=")">
                #{id}, #{element.a}, #{element.b}
            </foreach>
        </insert>
    </mapper>