스프링에 배치 삽입과 관련된 몇 가지 질문이 있습니다. 나는 그런 일 할 때hibernateTemplate, JdbcTemplate을 사용하는 스프링 배치 삽입물
는 :
public void save(Car car) {
String sql1 = "insert into Car values (1, 'toyota')";
String sql2 = "insert into Car values (2, 'chrysler')";
String sql3 = "insert into Car values (3, 'infinity')";
String[] tab = new String[2];
tab[0] = sql1;
tab[1] = sql2;
tab[2] = sql3;
getJdbcTemplate().update(sql1);
getJdbcTemplate().update(sql2);
getJdbcTemplate().update(sql3);
// getJdbcTemplate().batchUpdate(tab);
}
MySQL의 로그 파일을 나는 참조 :
1 Query insert into Car values (1, 'toyota')
2 Query insert into Car values (2, 'chrysler')
3 Query insert into Car values (3, 'infinity')
그래서 우리는 3 삽입 문 (3 네트워크 호출)가 있습니다.
내가 로그 파일에 getJdbcTemplate().batchUpdate(tab)
을 사용하면 내가 볼 수 있습니다
1094 [주] 디버그 org.springframework.jdbc.core.JdbcTemplate을 - 3 문 1110 [주] 디버그 조직의 SQL 일괄 업데이트를 실행. springframework.jdbc.datasource.DataSourceUtils - DataSource에서 JDBC 연결 가져 오기 [main] DEBUG org.springframework.jdbc.datasource.DriverManagerDataSource - 새 JDBC DriverManager 연결 만들기 [jdbc : mysql : // localhost : 3306/test? useServerPrepStmts = true] 1610 [main] DEBUG org.springframework.jdbc.support.JdbcUtils - JDBC 드라이버가 일괄 업데이트를 지원합니다.
와 MySQL 로그 :
1 Query insert into Car values (1, 'toyota')
1 Query insert into Car values (2, 'chrysler')
1 Query insert into Car values (3, 'infinity')
나는 배경 addBatch 방법에 문 객체에 호출이 모든 작업이 동시에 수행되는 것으로 알고 있습니다. 추가 혜택은 네트워크 통화 감소입니다. 내 논리가 맞습니까?
나는 HibernateTemplate에서 비슷한 것을 찾고있다. 나는이 방법으로 작업을 수행 할 수 있습니다
getHibernateTemplate().saveOrUpdateAll(Arrays.asList(new Car(4, "infinity"), new Car(5, "ford")));
를하는 경우, 로그 파일에 내가 볼 수 있습니다
는3 Prepare select car_.id, car_.name as name0_ from Car car_ where car_.id=?
3 Prepare select car_.id, car_.name as name0_ from Car car_ where car_.id=?
3 Prepare insert into Car (name, id) values (?, ?)
그래서이 getJdbcTemplate에 대해 수행 한대로 모든 것이 한 번에 할 것 같다() .updateBatch (...)
내가 틀렸다면 나를 바로 잡아주세요.