MyBatisのバッチ挿入のいくつかの方法
MyBatisには、複数の方法でバッチ挿入操作を実現することができます。
- foreach タグを使用する:
Mapper XML ファイルで foreach タグを使い、コレクションを繰り返して一括挿入操作を実行します。以下は例示コードです: -
INSERT INTO my_table (column1, column2)
VALUES(#{item.column1}, #{item.column2})
- ここでのリストは、データの挿入を含むコレクションです。
- Javaコード内でBatchExecutorバッチ実行器を使用して、バッチ挿入操作を実行します。例を以下に示します。
- SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH);
try {
MyMapper mapper = sqlSession.getMapper(MyMapper.class);
for (MyObject obj : list) {
mapper.insert(obj);
}
sqlSession.commit();
} catch (Exception e) {
sqlSession.rollback();
} finally {
sqlSession.close();
}「SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH);
try {
MyMapper mapper = sqlSession.getMapper(MyMapper.class);
for (MyObject obj : list) {
mapper.insert(obj);
}
sqlSession.commit();
} catch (Exception e) {
sqlSession.rollback();
} finally {
sqlSession.close();
}」 - ここにある list は、データの挿入が含まれるコレクションであり、MyObject は対応するテーブルのエンティティクラスです。
- JDBCを使用したバッチ処理:
JDBCのバッチ処理を直接使用して、一括挿入操作を実行します。以下はコード例です: - Connection connection = dataSource.getConnection();
try {
PreparedStatement ps = connection.prepareStatement(“INSERT INTO my_table (column1, column2) VALUES (?, ?)”);
for (MyObject obj : list) {
ps.setString(1, obj.getColumn1());
ps.setString(2, obj.getColumn2());
ps.addBatch();
}
ps.executeBatch();
connection.commit();
} catch (Exception e) {
connection.rollback();
} finally {
connection.close();
}コード中のdataSource.getConnection()によって接続が確立され、その後の処理でデータベースにINSERT文を実行し、最後に接続をクローズしています。 - ここでは、list はデータを挿入する集合であり、MyObject は対応するテーブルのエンティティクラスです。