Mybatisで一括Insert

Mybatisで一括Insert

MyBatisでの一括Insertの実装方法について説明します。
具体的な例として、test_userというテーブルと、そのマッパーインターフェースTestUserMapperを使用します。

一括Insertの基本概念

MyBatisでは、一括で複数のレコードをデータベースに挿入することができます。
これには、insert文を使用し、複数のレコードを一度に処理する方法が用いられます。
一括Insertを行う場合、通常はリストや配列としてデータを渡します。

一括Insertの実装手順

1. SQLマッパーの定義

まず、MyBatisのマッパーXMLファイルで一括InsertのSQL文を定義します。
以下は、test_userテーブルに対する一括Insertの例です。

<Mapper XMLファイルの設定>

TestUserMapper.xmlにおいて、一括Insert用のSQL文を定義します。
ここでは、insertタグを用いて複数のレコードを挿入するSQLを記述します。

<insert id="insertUsers" parameterType="java.util.List">
    INSERT INTO test_user (id, name, email)
    VALUES
    <foreach collection="list" item="user" separator=",">
        (#{user.id}, #{user.name}, #{user.email})
    </foreach>
</insert>

このSQL文では、foreachを使用してリスト内の各アイテムをINSERT文に追加しています。
collection属性にはリストを指定し、item属性にはリスト内のアイテムの変数名を指定します。
separator属性により、複数のレコードをカンマで区切っています。

<Mapperインターフェースの定義>

TestUserMapperインターフェースで、先ほど定義したSQL文を呼び出すメソッドを宣言します。

import java.util.List;

public interface TestUserMapper {
    void insertUsers(List<User> users);
}

このインターフェースでは、insertUsersメソッドがListUser型の引数を受け取るように定義されています。
Userは、test_userテーブルの各カラムに対応するプロパティを持つクラスです。

2. データの準備と呼び出し

次に、TestUserMapperのinsertUsersメソッドを呼び出してデータを挿入します。

<データの準備>

import java.util.ArrayList;
import java.util.List;

public class UserService {
    private TestUserMapper testUserMapper;

    public UserService(TestUserMapper testUserMapper) {
        this.testUserMapper = testUserMapper;
    }

    public void addUsers() {
        List<User> users = new ArrayList<>();
        users.add(new User(1, "Alice", "alice@example.com"));
        users.add(new User(2, "Bob", "bob@example.com"));
        // さらにユーザーを追加...

        testUserMapper.insertUsers(users);
    }
}

このクラスでは、addUsersメソッドを定義し、複数のUserオブジェクトをリストに追加しています。
その後、insertUsersメソッドを呼び出して、データベースに一括で挿入します。

まとめ

MyBatisでの一括Insertは、insertタグとforeachタグを使用することで実現できます。
foreachタグにより、リストや配列の各アイテムをSQL文に組み込むことができます。
この方法により、大量のデータを効率的に挿入することが可能です。