Mybatis adalah proyek open source dari Apache. Pada 2010, proyek ini dipindahkan dari Apache Software Foundation ke Google Code dan berganti nama menjadi Mybatis. Berikut ini adalah untuk memperkenalkan pemetaan lanjutan MyBatis, SQL dinamis dan mendapatkan konten kunci primer pendakian otomatis. Untuk detailnya, silakan merujuk ke artikel ini.
1. Dynamic SQL
Saya percaya bahwa semua orang akan selalu menghadapi masalah saat menggunakan mybatis untuk mengoperasikan database. Jika kita sekarang memiliki daftar penulis tentang penulis, kita perlu menanyakan informasi blog dari penulis yang sesuai dalam database berdasarkan informasi penulis yang ada di daftar penulis. Kemudian cara termudah untuk dipikirkan adalah dengan melintasi daftar penulis dan mendapatkan informasi yang sesuai untuk menanyakan database.
for (int i = 0; i <authorList.size (); i ++) {... // Kode database kueri // Pilih * dari blog Where Author =#{penulis, jdbctype = varchar}}Pikirkan tentang hal ini, jika lamanya daftar penulis adalah n, maka kita perlu menanyakan database n kali. Jika kita menggunakan metode ini, overhead program tidak hanya tentang permintaan, tetapi juga tentang mengambil instance koneksi dari kumpulan koneksi database, membuat koneksi basis data, dan mengembalikan instance database ke kumpulan koneksi database. Asumsikan bahwa ketiga tindakan ini membutuhkan total 0,001 detik. Kemudian, jika Anda menggunakan metode traversal untuk meminta, akan membutuhkan 0,001n detik lebih banyak. Jika Anda perlu meminta 1.000 kali, itu akan menjadi 1 detik lagi. Ini tak tertahankan untuk pemrogram, karena ini hanyalah kueri melingkar dan tidak menghitung sebagai kode bisnis lainnya.
Jadi, apakah ada cara yang lebih baik? Jawabannya adalah ya, salah satunya adalah dinamis SQL:
Pertama unggah kode:
<pilih id = "DynamicForeachTest" resultType = "com.blog.blog" parameterType = "java.util.list"> pilih * dari blog di mana penulis di <foreach collection = "list" index = "index" item = "item" open = "(" pemisah = "," close = ")">#{item} </foreach> "TEM mewakili alias ketika setiap elemen dalam set diulang.
Indeks menentukan nama untuk mewakili posisi yang setiap iterasi dicapai selama proses iterasi.
terbuka berarti di mana pernyataan dimulai,
Pemisah menunjukkan simbol apa yang digunakan sebagai pemisah antara setiap iterasi.
Tutup menunjukkan apa yang diakhiri dengan sehingga nilai pengembalian dapat diterima menggunakan Daftar <Bolg>.
Namun, pernyataan foreach dalam SQL dinamis menggunakan hal yang paling nyata dalam pernyataan insert dan biasanya digunakan dalam klausa.
2. Pemetaan Lanjutan
Saat menggunakan mybatis, hasilType = com.blog.Author Entity Class umumnya digunakan untuk menerima hasil kueri.
Atau gunakan resultType = java.util.map untuk mengembalikan nama kolom basis data sebagai kunci dan nilai catatan sebagai nilai.
Tapi kali ini, RACKMAP diperlukan, yang memungkinkan kombinasi nilai pengembalian gratis untuk menangani pertanyaan yang lebih kompleks.
Atau cukup unggah kode terlebih dahulu:
SQL:
<pilih id = "getBlogs" resultMap = "blog" parameterType = "peta"> pilih a.authorid, a.uthorname, b.blogid, b.blognamefrom penulis gabung kiri blog b pada a. AuthorID = b. otorid di mana a. AuthorID = #{AuthorID, JDBCTYPE = Integer} </pilih>Konfigurasi mybatis:
<resultMap id = "blog" type = "com.bloh.blog"> <id properti = "authorid" kolom = "authorid"> <hasil properti = "authorname" kolom = "authorname"> <collection properti = "postlist" Oftype = "com.bolg.post"> <id properti = "Blogid" Column "/"/"/<bologne =" "" Blogid "COLMOM"/"/"/<"COLMOM"> "Blogid" COLMOP "/"/"/<" "" " properti = "blogname"/> </resultMap>
Kelas entitas blog
Kelas publik bolg {private integer otorid; private string authorname; daftar pribadi <ost> postlist; // setter getter}Kelas entitas pos
Posting kelas publik {private integer blogid; private string blogname; // setter getter}Ini memungkinkan Anda untuk menerima kueri yang kompleks dengan suatu entitas.
Berikut ini adalah fungsi dari setiap atribut:
Saya tidak akan membahas detail tentang properti lain dan konfigurasi kueri mybatis biasa.
Hasil Hasil Digunakan sebagai pengganti Hasil, menunjukkan format yang dikembalikan oleh hasil kueri
ID di resultMap memiliki dua fungsi utama:
Indeks serupa untuk meningkatkan kinerja kueri
Membedakan hasil yang berbeda
Oleh karena itu, yang terbaik adalah tidak menghilangkan ID. Jika tidak ada kunci utama, gunakan bidang yang secara unik dapat membedakan catatan sebagai gantinya.
Hasilnya adalah nama variabel yang ditentukan dalam kelas entitas, dan kolom adalah nama kolom dari database
Koleksi adalah kumpulan daftar, peta, dll.
Daftar pos adalah nama variabel daftar yang ditentukan di kelas entitas blog
OfType adalah kelas entitas objek dalam daftar objek.
3. Dapatkan ID yang meningkat sendiri:
Jika ada situasi berikut, setelah memasukkan catatan basis data, Anda ingin mendapatkan kunci utama dari catatan insert, dan menggunakan kode bisnis berikutnya
Kemudian mybatis juga memberikan dukungan yang sesuai untuk situasi ini (penyisipan batch tidak didukung):
MySQL adalah ID yang memburuk sendiri suara asli; Dengan asumsi nama bidang dari kunci primer yang meningkat sendiri adalah ID
<masukkan id = "masukkan" useGeneratedKeys = "true" keyProperty = "id" parameTerType = "user"> masukkan ke dalam <include refid = "table_name" /> (name, usia) nilai ( #{name}, #{usia}) < /masukkan>Ada dua atribut lagi daripada insersi biasa useGeneratedKeys = "true" yang berarti bahwa ia mengembalikan ID pendakian diri saat diaktifkan.
KeyProperty = "ID" berarti nama kunci primer pengembalian.
Kemudian Anda dapat menggunakan pernyataan berikut untuk menerimanya dalam kode bisnis:
Asumsikan bahwa kelas entitas adalah pengguna
Pengguna usernew = usermapper.insert (pengguna);
Usernew.getid // adalah ID yang ditambah otomatis setelah penyisipan
Faktanya, kunci primer penumpang otomatis MySQL dapat diperoleh dengan terpilih last_insert_id ();
Jadi, ada cara lain untuk menulisnya:
<masukkan id = "masukkan" parameTerType = "user"> <sfectKey resultType = "int" order = "after" keyproperty = "id"> SELECT last_insert_id () sebagai id </selectKey> masukkan ke dalam nama, ageValues ( #{name}, #{usia}) </masukkan </masukkan>Ini persis kebalikan dari metode MySQL untuk mendapatkan kunci primer. MySQL adalah tabel yang mengalokasikan nilai pertumbuhan diri setelah disisipkan eksekusi, sementara Oracle memperoleh nilai pertumbuhan diri sebelum melakukan insert SQL. Sebelum mengeksekusi insert SQL, nilai kunci utama harus ditentukan ke catatan yang akan dimasukkan. Oleh karena itu, Anda perlu mendapatkan urutan pertumbuhan diri pada "Sebelum", dan kemudian menyuntikkannya ke peta parameter oleh SelectKey. Asumsikan pertumbuhan diri atau ID
<masukkan id = "masukkan" useGeneratedKeys = "true" keyProperty = "id" parameTerType = "xxxx"> <sfectKey resultType = "int" order = "sebelum" keyproperty = "id"> silahkan </tuan {{{{{{{name {{name {{{name {{{{dual a.ID di sini adalah ID Increment Auto yang diperoleh oleh SelectKey.
Metode penerimaan sama dengan MySQL. Saat memperoleh kunci primer penumpang otomatis, yang terbaik adalah menggunakan penerimaan entitas.
Di atas adalah pemetaan lanjutan Mybatis, SQL dinamis dan mendapatkan kunci primer yang ditambahkan sendiri yang diperkenalkan kepada Anda. 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!