Pengantar Mybatis
Mybatis adalah kerangka kerja lapisan kegigihan yang sangat baik yang mendukung pertanyaan SQL biasa, prosedur tersimpan dan pemetaan lanjutan. Mybatis menghilangkan pengaturan manual hampir semua kode dan parameter JDBC dan enkapsulasi pencarian dari set hasil. Mybatis dapat menggunakan XML sederhana atau anotasi untuk konfigurasi dan pemetaan asli, antarmuka pemetaan dan pojos Java (objek java tua biasa) ke dalam catatan dalam database.
Arsitektur fungsional Mybatis dibagi menjadi tiga lapisan (gambar dipinjam dari Baidu Encyclopedia):
1) Lapisan Antarmuka API: Menyediakan API antarmuka untuk penggunaan eksternal, di mana pengembang memanipulasi database. Setelah lapisan antarmuka menerima permintaan panggilan, itu akan menghubungi lapisan pemrosesan data untuk menyelesaikan pemrosesan data tertentu.
2) Lapisan Pemrosesan Data: Bertanggung jawab untuk pencarian SQL tertentu, parsing SQL, pelaksanaan SQL dan pemrosesan pemetaan hasil eksekusi, dll. Tujuan utamanya adalah untuk menyelesaikan operasi basis data berdasarkan permintaan panggilan.
3) Lapisan Dukungan Dasar: Bertanggung jawab atas dukungan fungsional paling dasar, termasuk manajemen koneksi, manajemen transaksi, pemuatan konfigurasi dan pemrosesan cache. Ini semua adalah hal umum, mengekstraksi mereka sebagai komponen paling mendasar. Memberikan dukungan paling dasar untuk lapisan atas lapisan pemrosesan data.
Saat memilih pemetaan di mybatis, tipe pengembalian dapat digunakan dengan HRESSTYPE atau RACKMAP. HasilType secara langsung mewakili tipe pengembalian, sedangkan RACKMAP adalah referensi ke Hasil ExternalMap, tetapi HasilType dan RACKMAP tidak dapat ada pada saat yang sama. Ketika mybatis memetakan pemetaan, pada kenyataannya, setiap kueri atribut ditempatkan di peta yang sesuai, di mana kunci adalah nama atribut dan nilainya adalah nilai yang sesuai. Ketika atribut tipe pengembalian yang disediakan adalah HasilType, MyBatis akan mengeluarkan pasangan nilai kunci di peta dan menetapkannya ke atribut yang sesuai dari objek yang ditentukan oleh HasilType. Jadi pada kenyataannya, jenis pengembalian dari setiap peta kueri mybatis adalah hasil yang dihasilkan. Namun, ketika atribut tipe pengembalian yang kami berikan adalah resultType, mybatis secara otomatis menetapkan nilai yang sesuai ke atribut objek yang ditentukan oleh hasil Hasil. Ketika tipe pengembalian yang kami berikan adalah hasil hasil, karena peta tidak dapat mewakili model domain dengan baik, kita perlu lebih jauh mengubahnya menjadi objek yang sesuai sendiri, yang seringkali sangat berguna dalam kueri kompleks.
Ada file blog.java seperti itu
import java.util.List;public class Blog {private int id;private String title;private String content;private String owner;private List<Comment> comments;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getTitle() {return title;}public void setTitle(String title) {this.title = title;}public String getContent() {return content;}public void setContent(String content) {this.content = content;}public String getOwner() {return owner;}public void setOwner(String owner) {this.owner = owner;}public List<Comment> getComments() {return comments;}public void setComments(List<Comment> comments) {this.comments = comments;}@Overridepublic String toString() {return "---------------- 博客 -----------------/N ID:" + id + "/n Judul:" + title + "/n konten:" + konten + "/n pemilik:" + pemilik;}}Tabel database yang sesuai berisi ID, judul, konten, dan atribut pemilik. Saat kami melakukan pemetaan kueri berikut
<typealias alias = "blog" type = "com.tians.mybatis.model.blog"/> <!-file konfigurasi dari mybatis mybatis_config.xml-> <pilih id = "selectblog" parameterType = "int" resultType = "blog"> dari t_blog di mana = #/{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{t_ dari t_ dari T_ dari T_ DARI T_ DAR/ID. Blogmapper.xml->MyBatis akan secara otomatis membuat objek HasilMap, dan kemudian merangkum pasangan nilai kunci berdasarkan nama atribut yang ditemukan. Kemudian, Anda akan melihat bahwa tipe pengembalian adalah objek blog, dan kemudian mengambil pasangan nilai kunci yang sesuai dengan objek blog dari RACKMAP dan menetapkannya.
Ini juga sangat berguna ketika tipe pengembalian secara langsung ARACTMAP, yang terutama digunakan untuk kueri sambungan yang kompleks, karena tidak perlu melakukan kueri sederhana. Pertama -tama mari kita lihat kueri sederhana dengan type resultMap, dan kemudian lihat penggunaan kueri yang kompleks.
Cara Menulis Kueri Sederhana
<resultMap type = "blog" id = "blogresult"> <id kolom = "id" properti = "id"/> <colom hasil = "title" properti = "title"/> <hasil kolom = "konten" properti = "konten"/> <hasil kolom = "pemilik" Properti = "pemilik"/> <hasil kolom = "Pemilik"/Pemilik = "pemilik"/> <pemilik hasil = "Pemilik"/> Kolom "Pemilik"/Pemilik "Pemilik =" Pemilik "/> <pemilik hasil =" properti = "pemilik"/> <</resultMap> <pilih id = "selectblog" parameTerType = "int" resultMap = "blogresult"> pilih * dari t_blog di mana id = #{id} </ pilih>Nilai HasilMap di peta SELECT adalah ID dari Hasil Eksternal, menunjukkan hasil mana yang dipetakan. Atribut tipe dari Hasil Eksternal Map menunjukkan jenis apa hasil dari HasilMap. Ini jenis blognya, jadi Mybatis akan mengeluarkannya sebagai objek blog. ID simpul anak dari simpul Hasilmap digunakan untuk mengidentifikasi ID objek, sedangkan simpul anak hasil digunakan untuk mengidentifikasi beberapa sifat sederhana. Properti kolom mewakili atribut yang ditanyakan dari database, dan properti mewakili properti mana yang nilai yang sesuai dari properti kueri ditetapkan untuk objek entitas. Ini adalah cara menulis HasilMap untuk kueri sederhana. Selanjutnya, mari kita lihat pertanyaan yang lebih rumit.
Ada kelas komentar, yang memiliki referensi blog, menunjukkan untuk blog mana itu. Saat meminta komentar, kita juga harus mengetahui blog yang sesuai dan menetapkannya ke atribut blognya.
impor java.util.date; komentar kelas publik {private int id; konten string pribadi; tanggal private date commentDate = tanggal baru (); blog blog publik; int int getId () {return id;} public void setId (int id) {this.id = ID;} public string getContent () {return content;} public void setComment (content public) {this. {return commentDate;} public void setCommentDate (date commentDate) {this.commentDate = commentDate;} Blog publik getBlog () {return blog;} public void setBlog (blog blog) {this.blog = blog;} public string toString () {return blog + "/n-n ---- 评论--- 评论---- "/n CommentDate:" + CommentDate;}}Itu tertulis seperti ini
<!-Dari file commentMapper.xml-> <resultMap type = "comment" id = "commentResult"> <asosiasi properti = "blog" select = "selectblog" kolom = "blog" javatype = "blog"/> </resultMap> <pilih id = "selectComment" parameTerpe = "int" id hancur " id = "selectblog" parameTerType = "int" resultType = "blog"> pilih * dari t_comment di mana id = #{id} </select> <pilih id = "selectblog" parameTerType = "int" resultType = "blog"> dari t_blog di mana id = #{id} </pilih>Situasi akses seperti ini. Pertama, Anda meminta peta pilih dengan ID SelectComment, dan kemudian Anda mendapatkan objek HasilMap dengan ID CommentResult. Kita dapat melihat bahwa tipe pengembalian dari Hasil yang sesuai adalah objek komentar, yang hanya memiliki satu simpul asosiasi, dan tidak ada ID dan hasil hasil anak yang sesuai dengan kueri sederhana yang disebutkan di atas, tetapi masih akan menetapkan ID yang sesuai dan atribut lain ke objek komentar. Inilah yang saya sebutkan sebelumnya. ATIS memiliki fungsi enkapsulasi otomatis. Selama Anda memberikan jenis pengembalian, MyBatis akan menggunakan hasil kueri untuk merangkum objek yang sesuai sesuai dengan penilaiannya sendiri. Oleh karena itu, dalam kueri sederhana di atas, jika Anda tidak secara jelas menunjukkan bidang mana yang sesuai dengan ID dan bidang mana yang sesuai dengan judul dalam HasilMap, Mybatis juga akan merangkumnya sesuai dengan penilaiannya sendiri. Penilaian Mybatis sendiri adalah membandingkan bidang kueri atau alias yang sesuai dengan atribut objek pengembalian. Jika cocok dan jenisnya juga cocok, mybatis akan menetapkannya. Atribut blog dikaitkan dalam hasil hasil yang sesuai di atas, dan tipe Java yang sesuai adalah blog. Dalam metode penulisan di atas, objek terkait dikaitkan melalui subqueries, dan tentu saja, itu juga dapat dikaitkan langsung melalui kueri asosiasi. Pada simpul anak asosiasi di atas, atribut properti menunjukkan properti terkait mana adalah jenis pengembalian hasil. Untuk contoh di atas, atribut blog yang dikelola oleh komentar; SELECT menunjukkan peta pilih mana untuk memetakan atribut terkait yang sesuai, yaitu, itu akan meminta peta pilih dengan nilai yang sesuai untuk memilih untuk meminta objek atribut yang terkait; Kolom menunjukkan pasangan nilai kunci yang sesuai dengan HasilMap dengan ID CommentResult. Pasangan nilai kunci ini akan digunakan sebagai parameter untuk subquery dari objek yang terkait, yaitu nilai kueri atribut blog dalam selectComment dilewatkan sebagai parameter ke subquery dari blog objek terkait ke subquery blog objek terkait; Javatype menunjukkan jenis objek terkait saat ini di Java.
Di atas memperkenalkan permintaan hubungan satu-ke-satu atau satu-ke-banyak ke satu partai dalam kasus satu-ke-banyak. Dalam aplikasi yang sebenarnya, ada aplikasi lain yang menggunakan lebih sering. Penting untuk mengetahui lebih banyak partai yang sesuai melalui satu pihak. Saat mengambil lebih banyak partai, satu pihak juga harus dikaitkan dengan satu pihak. Yaitu, dalam contoh di atas, saat mengeluarkan objek blog, semua komentar yang sesuai dikeluarkan. Saat mengeluarkan komentar, masih perlu mengeluarkan blog yang sesuai. Ini diambil melalui permintaan di Java. Metode penulisan adalah sebagai berikut:
<!-- From BlogMapper.xml file--><resultMap type="Blog" id="BlogResult"><id column="id" property="id"/><collection property="comments" select="selectCommentsByBlog" column="id" ofType="Comment"></collection></resultMap><resultMap type="Comment" id="CommentResult"><association property="blog" javatype = "blog" kolom = "blog" select = "selectblog"/> </resultMap> <pilih id = "selectblog" parameTerType = "int" resultMap = "blogresult"> select * dari t_blog di mana id = #{id} </selection> <!-temukan komentar dengan blog-> <Select ID = "PARAMEP =" Dari t_comment Where Blog = #{BlogID} </ pilih>Masuknya permintaan di atas adalah peta terpilih dengan ID SelectBlog, dan hasil pengembalian adalah HasilMap dengan ID Blogresult. Jenis ID Blogresult adalah blog, yang menentukan atribut dan bidang ID. Menentukan ID akan memiliki efek besar pada konstruksi internal mybatis. Ini terkait dengan objek komentar. Karena sebuah blog dapat memiliki banyak komentar, yang merupakan koleksi, sehingga dipetakan dengan koleksi koleksi. Pilihan masih menunjukkan subquery mana yang dilakukan untuk menanyakan komentar yang sesuai. Kolom berarti nilai bidang mana yang ditemukan di atas diteruskan ke subquery sebagai parameter. Oftype juga mewakili tipe pengembalian. Jenis pengembalian di sini adalah jenis di dalam koleksi. Alasan mengapa ofType digunakan sebagai ganti tipe adalah karena digunakan dalam mybatis untuk membedakannya dari asosiasi asosiasi.
Kode Uji:
@Testpublic void selectCommentsByBlogTest () {sqlSession session = util.getSqlSessionFactory (). OpenSession (); CommentMapper CommentMapper = session.getMapper (commentMapper.class); Daftar <Omment> Comments = CommentMapper.SelectCompentsBlog (6); untuk komentar: Komentar: Komentar = Komentar = CommentMapper.SelectCompentsBlog (6); Untuk komentar: untuk komentar: Komentar = Komentar = CommentMapper.SelectCompentsBlog (6); untuk komentar: untuk komentar: komentar <Komentar> Comments = CommentMapper.SELECTEK Komentar) System.out.println (komentar); session.close ();}/*** permintaan satu catatan*/@testpublic void testselectone () {sqlsession session = util.getsqlSessionFactory (). OpenSession (); blogmapper blogmapper = session.getmapper (blogmapper. Blog.getComments (); if (komentar! = null) {System.out.println ("-------------- Ukuran Komentar ------------" + Komentar.Size ()); untuk (komentar komentar: komentar) System.out.println (komentar);} session.close ();}Di atas adalah tinjauan singkat dari HasilMap di Mybatis 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!