Baru -baru ini, saya membuat persyaratan impor batch, dan batch memasukkan beberapa catatan ke dalam database.
Solusi: Encapsulate objek pengumpulan daftar dalam program, lalu masukkan entitas dalam koleksi ke dalam database. Karena proyek menggunakan mybatis, ia direncanakan untuk menggunakan fungsi foreach Mybatis untuk penyisipan batch. Selama periode ini, saya menemukan kesalahan "Perintah SQL tidak berakhir dengan benar", dan akhirnya menyelesaikannya dan merekamnya untuk ulasan dan pembelajaran di masa mendatang.
Pertama, saya merujuk informasi tentang MyBatis 'Insert Online Online, sebagai berikut:
Foreach terutama digunakan dalam membangun dalam kondisi, dapat mengulangi koleksi dalam pernyataan SQL.
Atribut elemen foreach terutama mencakup item, indeks, koleksi, terbuka, pemisah, dan tutup.
Item mewakili alias ketika setiap elemen dalam koleksi diulang. Indeks menentukan nama untuk mewakili posisi yang setiap iterasi dicapai selama proses iterasi. Open mewakili apa yang dimulai dengan pernyataan, pemisah mewakili simbol apa yang digunakan sebagai pemisah antara setiap iterasi, dan Close mewakili apa yang diakhiri dengan. Hal yang paling kritis dan paling rawan kesalahan saat menggunakan foreach adalah atribut koleksi. Atribut ini harus ditentukan, tetapi dalam kasus yang berbeda, nilai atribut berbeda. Ada tiga situasi utama:
1. Jika lulus dalam satu parameter dan jenis parameter adalah daftar, nilai atribut koleksi adalah daftar
2. Jika lulus dalam satu parameter dan jenis parameter adalah array, nilai properti koleksi adalah array
3. Jika ada beberapa parameter yang dilewati, kita perlu merangkumnya ke dalam peta. Tentu saja, satu parameter juga dapat dienkapsulasi ke dalam peta.
Kemudian, file XML berikut ditulis sesuai dengan salinannya.
file xxxmapper.xml:
<masukkan id = "addSupCity" parameTerType = "java.util.list"> <selectKey keyproperty = "cityid" order = "sebelum" resultType = "string"> <! [cdata [pilih seq_ocl_supity.nextval dari dual]]> </selectkey> masukkan ke t_ocl_supity.nextval dari dual]]> </selectKey> masukkan ke t_ocler_se.scity, dari dual]]> </selectKey> masukkan ke t_ocler, citycity, dual]]> </selectKey> masukkan ke t_oclere.supity. Area_desc, SUP_ID, STAT) Nilai <foreach collection = "list" item = "item" index = "index" pemisah = ","> (#{item.cityid, jdbctype = varchar},#{item.citycode, jdbctype = varchar},#{item.cityname, jdbctype = varchar},#{item .areadesc, jdbctype = varchar},#{item.supid, jdbctype = varchar},#{item.stat, jdbctype = varchar}) </foreach> </sert>Namun, setelah berjalan, itu terus melaporkan kesalahan, dan pesan kesalahan adalah sebagai berikut:
### sql: masukkan ke t_ocl_supcity (city_id, city_code, city_name, Area_desc, sup_id, stat) value (?,?,?,?,?,?), (?,?,?,?,?) ### orA-oVa.
Menyalin SQL out dan berjalan di PL/SQL juga melaporkan kesalahan yang sama. Seperti dapat dilihat di atas, pernyataan SQL yang dieksekusi menggunakan insert batch setara dengan: masukkan ke dalam nilai T_OCL_SUPCITY (City_ID, CITY_CODE, CITY_NAME, AREA_DESC, SUP_ID, stat) (?,?,?,?), (?,?,?,?), Dan dalam Oracle Nilai XX (Nilai XX (XXX (? tak tertandingi. Melihat kembali artikel itu, saya menemukan bahwa ini cocok untuk MySQL dan bukan untuk Oracle, jadi saya memodifikasi file XML:
<masukkan id = "addSupcity" parameTerType = "java.util.list"> masukkan ke t_ocl_supcity (city_id, city_code, city_name, Area_desc, SUP_ID, stat) Pilih SEQ_OCL_SUPCITY.NEXTVAL CITY_ID, A.*Dari (<foreach collection = " #{item.citycode, jdbctype = varchar} city_code,#{item.cityname, jdbctype = varchar} city_name,#{item.areadesc, jdbctype = varchar} area_desc,#{item.supid, jdbctype = varchar} Area_desc,#{item.supid, jdbctype = varchar} Area_desc, Dual </tandingeach>) a </sert>Lari melalui.
Dalam versi Oracle, ada beberapa hal yang perlu diperhatikan:
1. Tidak ada nilai di SQL;
2. (Selece ...... dari ganda);
3. Atribut pemisah dalam tag <teach> adalah "Union All", dan kueri akan digabungkan ke dalam set hasil.
Di atas adalah solusi cepat untuk kesalahan insert batch oracle+mybatis foreach insert fungsi yang diperkenalkan kepada Anda oleh editor. Saya harap ini akan membantu Anda. Jika Anda memiliki pertanyaan, silakan tinggalkan saya pesan dan editor akan membalas Anda tepat waktu. Terima kasih banyak atas dukungan Anda ke situs web Wulin.com!