Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

sử dụng foreach để thực hiện chèn hàng loạt với mybatis

Chèn bên trong Mybatis foreach không phải là hàng loạt , đây là một câu lệnh SQL duy nhất (có thể trở thành khổng lồ) và điều đó mang lại những hạn chế:

  • một số cơ sở dữ liệu như Oracle ở đây không hỗ trợ.
  • trong các trường hợp có liên quan:sẽ có một số lượng lớn các bản ghi để chèn và giới hạn được định cấu hình cơ sở dữ liệu (theo mặc định khoảng 2000 tham số cho mỗi câu lệnh) sẽ bị ảnh hưởng và cuối cùng có thể lỗi ngăn xếp DB nếu bản thân câu lệnh trở nên quá lớn.

Việc lặp lại bộ sưu tập không được thực hiện trong mybatis XML. Chỉ cần thực hiện một Chèn đơn giản câu lệnh trong Java Foreach vòng lặp. Điều quan trọng nhất là loại session Executor .

SqlSession session = sessionFactory.openSession(ExecutorType.BATCH);
for (Model model : list) {
    session.insert("insertStatement", model);
}
session.flushStatements();

Tôi nghĩ rằng ở đây chỉ cần sử dụng ExecutorType.REUSE là đủ mà không cần tuyên bố rõ ràng.

Không giống như ExecutorType.SIMPLE mặc định , câu lệnh sẽ được chuẩn bị một lần và được thực thi cho mỗi bản ghi để chèn.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Khóa duy nhất trong Oracle với các ví dụ

  2. Sử dụng một câu lệnh trường hợp trong một ràng buộc kiểm tra

  3. Xoay vòng với các cột động trong Oracle

  4. Oracle - cập nhật cùng một bảng mà trên đó trình kích hoạt được kích hoạt

  5. Cập nhật SQL, xóa và chèn cùng lúc