Wstaw wewnątrz Mybatis foreach nie jest partią , jest to pojedyncza (może stać się gigantyczna) instrukcja SQL, która ma wady:
- niektóre bazy danych, takie jak Oracle tutaj, nie są obsługiwane.
- w odpowiednich przypadkach:będzie duża liczba rekordów do wstawienia i zostanie osiągnięty limit skonfigurowany w bazie danych (domyślnie około 2000 parametrów na instrukcję) i ewentualnie błąd stosu bazy danych, jeśli sama instrukcja stanie się zbyt duża.
Iteracja po kolekcji nie może być wykonywana w XML mybatis. Wystarczy wykonać proste Wstaw oświadczenie w Java Foreach pętla.Najważniejszy jest typ executora sesji .
SqlSession session = sessionFactory.openSession(ExecutorType.BATCH);
for (Model model : list) {
session.insert("insertStatement", model);
}
session.flushStatements();
Wydaje mi się, że tutaj wystarczy użyć ExecutorType.REUSE bez instrukcji dotyczących płukania.
W przeciwieństwie do domyślnego ExecutorType.SIMPLE , oświadczenie zostanie przygotowane raz i wykonane dla każdego rekordu do wstawienia.