J'ai quelques questions liées à l'insertion par lots au printemps.insertion de lot de printemps en utilisant hibernateTemplate, JdbcTemplate
Quand je fais quelque chose comme ça:
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);
}
dans le fichier journal mysql je vois:
1 Query insert into Car values (1, 'toyota')
2 Query insert into Car values (2, 'chrysler')
3 Query insert into Car values (3, 'infinity')
Nous avons donc 3 instructions d'insertion (et 3 appels réseau).
Lorsque j'utilise getJdbcTemplate().batchUpdate(tab)
dans le fichier journal que je peux voir:
1094 [principale] DEBUG org.springframework.jdbc.core.JdbcTemplate - Exécution mise à jour batch SQL de 3 déclarations 1110 [principale] org DEBUG. springframework.jdbc.datasource.DataSourceUtils - Récupération de la connexion JDBC à partir de DataSource 1110 [main] DEBUG org.springframework.jdbc.datasource.DriverManagerDataSource - Création d'une nouvelle connexion JDBC DriverManager vers [jdbc: mysql: // localhost: 3306/test? useServerPrepStmts = vrai] 1610 [principal] DEBUG org.springframework.jdbc.support.JdbcUtils - Le pilote JDBC prend en charge les mises à jour par lots
et mysql journal:
1 Query insert into Car values (1, 'toyota')
1 Query insert into Car values (2, 'chrysler')
1 Query insert into Car values (3, 'infinity')
Je comprends que dans la méthode de addBatch de fond est invoqué sur l'objet de déclaration et toutes ces opérations sont réalisées simultanément. Un avantage supplémentaire est la réduction des appels réseau. Est-ce que mon raisonnement est correct?
Je cherche quelque chose de similaire dans HibernateTemplate. Je peux le faire de cette façon:
getHibernateTemplate().saveOrUpdateAll(Arrays.asList(new Car(4, "infinity"), new Car(5, "ford")));
Dans ce cas, dans le fichier journal que je peux voir:
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 (?, ?)
Il semble donc que tout est fait en un seul coup comme il a été fait pour getJdbcTemplate() .updateBatch (...)
Veuillez me corriger si je me trompe.