🥇 JDBC에서 제공하는 bulk_update로 loop가 종료되는 시점에 일괄 쿼리를 날리는 방법을 찾게 되었다.

감사하게도..JdbcTemplate 클래스로 구현이 돼있어 가져다쓰면 됐다. 😭
public void saveAll(List<Class> classes){
String sql = "INSERT INTO {DB Table} ({칼럼1, 2 ....} +
VALUES (?, ?, ...)";
jdbcTemplate.batchUpdate(sql, <classes>, <classes.size()>,
(PreparedStatement ps, <Class> <class>) -> {
ps.setString(1, {class.getValue()};
ps.setString(2, .....);
...
}
}
파라미터로 넘겨받은 list의 크기만큼 배치가 돌면서 해당 쿼리문의 value값을 setString 메서드로 바인딩한다.




10000개의 데이터의 성능 차이가 이정도....
참고로 내부 로직에선 update쿼리도 두번 더 나간다.
JPA에서 SaveAll보다 많이 사용되는 것 같은데 이부분도 한번 찾아봐야겠다.
비단 INSERT 뿐만 아니라, UPDATE, DELETE쿼리까지 bulkUpdate를 범용적으로 활용할 수 있다!
참고 - https://docs.spring.io/spring-framework/reference/data-access/jdbc/advanced.html