【MyBatis】BULK INSERTでデータを登録する方法
MyBatisでデータを一括登録(BULK INSERT)する方法を紹介します。
また「一括登録(BULK INSERT)」と「1件ずつ登録(INSERT)」する方法で 1万、10万、100万レコードを登録したときにかかる処理時間を測定しています。
本記事で使用するテーブル定義は次のとおり。
物理名 | 論理名 | データ型 | NOT NULL | 説明 |
id | ID | BIGINT | 〇 | 主キー(AUTO_INCREMENT) |
name | 名前 | VARCHAR(100) | 〇 | ユーザーの名前 |
address | 住所 | VARCHAR(255) | ユーザーの住所 | |
phone | 電話番号 | VARCHAR(50) | ユーザーの電話番号 | |
update_date | 更新日時 | DATETIME | 〇 | 最終更新日時 |
create_date | 作成日時 | DATETIME | 〇 | 登録日時 |
delete_date | 削除日時 | DATETIME | 論理削除した日時 |
スポンサーリンク
SQL文(XMLファイル)
MyBatisのSQL文(XMLファイル)は次のとおり。通常のINSERT文と一括登録(BULK INSERT)のSQL文を記載しています。
[XMLファイル]
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.example.demo.dao.UserInfoMapper"> <!-- 1件登録 --> <insert id="insert"> INSERT INTO userInfo ( name ,address ,phone ,update_date ,create_date ) VALUES ( #{name} ,#{address} ,#{phone} ,CURRENT_TIMESTAMP ,CURRENT_TIMESTAMP ) </insert> <!-- 一括登録 --> <insert id="bulkInsert"> INSERT INTO userInfo ( name ,address ,phone ,update_date ,create_date ) VALUES <foreach collection="userList" item="item" separator=","> ( #{item.name} ,#{item.address} ,#{item.phone} ,CURRENT_TIMESTAMP ,CURRENT_TIMESTAMP ) </foreach> </insert> </mapper>
一括登録(BULK INSERT)は、<foreach>~</foreach>を利用し一括で登録する内容を生成しています。
Mapperクラス
MyBatisのMapperクラスは次のとおり。
[Mapperクラス]
package com.example.demo.dao; import java.util.List; import org.apache.ibatis.annotations.Mapper; import com.example.demo.entity.UserInfo; /** * ユーザー情報 Mapper */ @Mapper public interface UserInfoMapper { /** * ユーザー情報登録 * @param userInfo ユーザー情報エンティティ */ void insert(UserInfo userInfo); /** * ユーザー情報一括登録 * @param userList ユーザー情報エンティティのリスト */ void bulkInsert(List<UserInfo> userList); }
測定結果
下記の表は「1件ずつ登録」した場合と「一括で登録(BULK INSERT)」した場合の測定結果です。
※測定しているPCのメモリは8GB、データベースはMySQLを使用、BULK INSERTは1000件単位で一括登録しています。
登録方法 | 1万件 | 10万件 | 100万件 |
---|---|---|---|
1件ずつ登録 | 4秒 | 46秒 | 6分39秒 |
一括登録(1000件ずつまとめて登録) | 2秒 | 7秒 | 1分19秒 |
測定した結果、1件ずつ登録するよりも一括で登録(BULK INSERT)した方が圧倒的に早いという結果になりました。

大量データを扱う場合は、BULK INSERTを使用することをお勧めします。
helpful
この記事は役に立ちましたか?