Bagi mereka yang tidak terlalu jelas tentang dasar -dasar mybatis, silakan merujuk ke artikel ini: MyBatis Pendahuluan Pembelajaran Tutorial (I) - MyBatis Cepat Pendahuluan.
Bertemu mybatis
Mybatis adalah proyek open source dari Apache. Pada 2010, proyek ini dipindahkan dari Apache Software Foundation ke Google Code dan berganti nama menjadi Mybatis. Bermigrasi ke GitHub pada November 2013.
Istilah ibatis berasal dari kombinasi "Internet" dan "Abatis", dan merupakan kerangka kerja lapisan kegigihan berbasis Java. Ibatis menyediakan kerangka kerja lapisan persistensi termasuk peta SQL dan objek akses data (DAO)
album gambar mybatis
Perkenalan
Saya menyebutkan kueri database dan permintaan manajemen yang sederhana sebelumnya. Ada beberapa pengembangan permintaan satu-ke-satu, satu-ke-banyak dan banyak-ke-banyak dalam persyaratan pengembangan. Misalnya, ketika mengembangkan keranjang belanja, pesanan dan pengguna adalah satu-ke-satu, pengguna dan pesanan adalah satu-ke-banyak, dan pengguna dan produk banyak-ke-banyak. Ini juga umum dalam pembangunan hibernasi. Mereka diimplementasikan melalui pemetaan data di Hibernate, dan di Mybatis, mereka diimplementasikan melalui pemetaan data dalam file konfigurasi.
Kueri satu-ke-satu
Jika kami ingin meminta informasi pemesanan dan mengaitkan informasi pengguna kueri untuk membuat pesanan, maka ini adalah kueri satu-ke-satu yang khas. Ada dua cara untuk menerapkan kueri satu-ke-satu: Gunakan Hasil Hasil dan Hasil. Hasil Hasil memerlukan definisi POJO tambahan, dan kemudian bidang kueri sesuai dengan POJO yang baru didefinisikan satu per satu. RACKMAP perlu menerapkan korelasi satu-ke-satu antara dua POJO melalui file konfigurasi. Mari kita terapkan kedua metode ini secara terpisah di bawah ini.
Hasil Hasil:
1. Buat Pojo dan tambahkan atribut baru yang perlu dipetakan ke PoJo baru.
Public Class OrderCustom memperluas pesanan {// tambahkan informasi pengguna Private String Private String; seks string pribadi; alamat string pribadi; string publik getUserName () {return username; } public void setusername (string username) {this.username = username; } public string getsex () {return sex; } public void setSex (string sex) {this.sex = sex; } public String getAddress () {alamat kembali; } public void setAddress (Alamat String) {this.address = alamat; }}2. Pemetaan file:
<Pilih id = "findOrderUser" resultType = "com.luchao.mybatis.first.po.ordercustom"> Pilih pesanan.*, user.username, user.sex, user.address dari pesanan, pengguna di mana pesanan.user_id = user.id </pilih </pilih
3. Implementasi antarmuka mapper:
// Pesanan Kueri dan Informasi Pengguna Daftar Publik <FertionCustom> findOrderUser () melempar pengecualian;
4. Kode Uji:
public void findordersUser () melempar Exception {// Dapatkan objek SQLSession SQLSession SQLSession = sqlSessionFactory.opensession (); // Buat objek OrderMapper, MyBatis secara otomatis menghasilkan mapper proxy orderMapper orderMapper = sqlSession.getMapper (ordermapper.class); // Hubungi metode OrderMapper untuk meminta pesanan dan Daftar Informasi Pengguna <FertionCustom> orderCustoms = ordermapper.findoDerUser (); System.out.println (ordercustoms.size ()); }Implementasi Hasil:
Hasil Map Maps Informasi Pesanan Dalam hasil kueri ke objek Pesanan, menambahkan atribut pengguna di kelas pesanan, dan memetakan informasi pengguna kueri yang terkait ke atribut pengguna di objek Pesanan.
1. Buat pojo dan tambahkan atribut pengguna ke kelas pesanan.
Pesanan Kelas Publik {Private Integer ID; Pengguna Integer Pribadi; nomor string pribadi; createTime tanggal pribadi; Catatan string pribadi; // informasi pengguna pengguna pengguna pribadi; // Pesanan entri daftar pribadi <OrderDetail> orderDetails; Integer publik getId () {return id; } public void setid (integer id) {this.id = id; } public integer getUserId () {return userId; } public void setUserId (integer userId) {this.userid = userId; } public String getNumber () {return number; } public void setNumber (string number) {this.number = number == null? null: number.trim (); } tanggal publik getCreateTime () {return createTime; } public void setCreateTime (date createTime) {this.createTime = createTime; } public String getNote () {return note; } public void setNote (string note) {this.note = note == null? null: note.trim (); } pengguna publik getUser () {return user; } public void setUser (pengguna pengguna) {this.user = user; } Daftar Publik <FertionDetail> getOrderDetails () {return orderDetails; } public void setOrderDetails (Daftar <FertionDetail> orderDetails) {this.orderDetails = orderDetails; }}2. Pemetaan file:
<!-Pesanan Kueri Hasil dari pengguna yang terkait, Peta seluruh hasil kueri ke pesanan-> <resultMap type = "com.luchao.mybatis.first.po.orders" id = "ordersuserResultMap" <dan "column =" ID "Properti" /id " /<Hasil Kolom =" User_id = "" ID "AFROPLE" "ID" /ID " /<" UserReSerReSULTMAP /"ID" PROPERTI "" ID " /ID" ID " /<USERRESERRESULTMAP" kolom = "createTime" properti = "createTime" /> <hasil kolom = "note" properti = "note" /> <!-Mengkonfigurasi informasi pengguna terkait pemetaan-> <!-Asosiasi: Digunakan untuk memetakan informasi untuk kueri terkait properti objek tunggal: Properti mana pun. <!-- id: Unique ID of the associated query user column: Specify the column that uniquely identifies user information javaType: Which property of the user map to --> <id column="user_id" property="id" /> <result column="username" property="username" /> <result column="sex" property="sex" /> <result column="address" property="address" /> </association> </resultMap> <select id = "findOrderUserMap" resultMap = "ordersuserResultMap"> pilih pesanan.*, user.username, user.sex, user.address dari pesanan, pengguna where orders.user_id = user.id </pilih>
Asosiasi: Digunakan untuk memetakan informasi dari kueri terkait objek tunggal, properti: properti mana dalam pesanan untuk memetakan informasi pengguna dari kueri terkait.
3. Antarmuka Mapper
// Pesanan kueri dan informasi pengguna melalui Daftar Publik HasilMap <TESTERS> FindOrderUserMap () melempar pengecualian;
4. Kode Uji:
public void findordersusermap () melempar Exception {// Dapatkan objek SQLSession SQLSession SQLSession = sqlSessionFactory.opensession (); // Buat objek OrderMapper, MyBatis secara otomatis menghasilkan mapper proxy orderMapper orderMapper = sqlSession.getMapper (ordermapper.class); // Hubungi metode OrderMapper untuk meminta pesanan dan Daftar Informasi Pengguna <FORDERS> PESAN = orderMapper.findorderUserMap (); System.out.println (orders.size ()); }Hasil Hasil dan Hasil Map Menerapkan ringkasan kueri satu-ke-satu:
HasilType: relatif mudah untuk diimplementasikan menggunakan HasilType. Jika nama kolom kueri tidak termasuk dalam POJO, Anda perlu menambahkan atribut yang sesuai dari nama kolom untuk menyelesaikan pemetaan. Jika tidak ada persyaratan khusus untuk hasil kueri, disarankan untuk menggunakan HasilType.
HasilMap: Hasil PMN perlu didefinisikan secara terpisah, yang sedikit merepotkan. Jika ada persyaratan khusus untuk hasil kueri, menggunakan RACKMAP dapat menyelesaikan atribut POJO pemetaan kueri terkait. HasilMap dapat menerapkan pemuatan malas, HasilType tidak dapat mengimplementasikan pemuatan malas.
Kueri satu-ke-banyak
Jika Anda perlu meminta detail pesanan dan pemesanan, maka ini adalah persyaratan permintaan satu-ke-banyak.
1. Pojo sama dengan pojo dari ordo di Hasil di atas. Atur detail pesanan untuk daftar sebagai atribut dari pesanan.
2. Pemetaan file:
<!-- Map for order and order details and user information Use inheritance does not need to configure order and user information --> <resultMap type="com.luchao.mybatis.first.po.Orders" id="ordersOrderdetailResultMap" extends="ordersUserResultMap"> <collection property="orderdetails" OfType = "com.luchao.mybatis.first.po.orderDetail"> <colom hasil = "orderDetail_id" properti = "id" /> <hasil kolom = "items_id" properti = "itemsid" /> <order order "property =" items_num = "itemsnum" / /<itemsid " /<order> <order order" Properti = "Properti =" itemsnum " /> <order order> <order" /<s items_num " id = "findOrderdoRderDetailMap" resultMap = "ordersOrderDetailResultMap"> pilih pesanan.*, user.username, user.sex, user.address, orderDetail.id orderDetail_id, orderdetail.items_id, ordeDetail.items_num, ordetail.idetail.orders.items_id, orderdetail.items_num, ordetail.orders = orderers, orderseil, orderseail.items_num, ordetail.orders = orders, orderseil, orderseil, ordeAder.items_num, ordetail. user.id dan orderDetail.orders_id = orders.id </select>
Hasil dari pesanan dan detail pesanan diwarisi menggunakan Extends, dan tidak perlu mengkonfigurasi pemetaan informasi pesanan dan informasi pengguna.
Koleksi: Peta beberapa catatan ke objek koleksi untuk kueri asosiasi, properti: Peta beberapa catatan ke properti pesanan.
OfType: Menentukan jenis yang memetakan ke pojo dalam atribut koleksi daftar. Perhatikan bahwa masih ada perbedaan antara ofType dan satu-ke-satu.
3. Antarmuka Mapper:
// Pertanyaan Pesanan, Rincian Pesanan, dan Informasi Pengguna Melalui Hasil
Daftar Publik <TERDERS> FindOrderDorderDetailMap () melempar pengecualian;
4. Kode Uji:
public void findOrderdoRderDetailMap () melempar Exception {// Dapatkan objek SQLSession SQLSession SQLSession = sqlSessionFactory.opensession (); // Buat objek OrderMapper, MyBatis secara otomatis menghasilkan mapper proxy orderMapper orderMapper = sqlSession.getMapper (ordermapper.class); // Hubungi metode OrderMapper untuk meminta pesanan dan Daftar Informasi Pengguna <FORDERS> PESAN = orderMapper.FindOrderDorderDetailMap (); System.out.println (orders.get (). GetOrderDetails (). Size ()); System.out.println (orders.size ()); }Ringkasan satu-ke-banyak:
MyBatis menggunakan koleksi RACKMAP untuk memetakan beberapa catatan kueri terkait ke dalam properti koleksi daftar.
Implementasi Menggunakan HasilType:
Pemetaan detail pesanan ke dalam pesanan dalam pesanan, Anda perlu menanganinya sendiri, menggunakan loop ganda untuk melintasi, menghapus catatan duplikat, dan menempatkan rincian pesanan di urutan pesanan. Ini akan lebih merepotkan.
Banyak-ke-banyak
Jika kami menanyakan informasi produk pengguna dan pengguna, ini banyak-ke-banyak, dan Anda dapat menggunakan pemetaan banyak-ke-banyak Mybatis.
Peta informasi pengguna ke pengguna. Tambahkan Daftar Atribut Daftar Pesanan <dister> Daftar Pesanan di kelas Pengguna, Peta pesanan yang dibuat oleh pengguna ke Daftar Pesanan, tambahkan daftar atribut Daftar Detail Pesanan <FertionDetail> OrderDetials dalam pesanan, peta detail pesanan ke Pesanan, Tambahkan Item Atribut di OrderDetail, dan peta item yang sesuai dengan detail ke item.
1. Pojo
Public Class OrderDetail {Private Integer ID; OrderSid integer pribadi; Item Integer Pribadi; Private Integer ItemsNum; // Informasi Produk Item pribadi item; Integer publik getId () {return id; } public void setid (integer id) {this.id = id; } public integer getordersId () {return ordersId; } public void setordersId (integer ordersId) {this.ordersId = ordersId; } public integer getItemsId () {return itemsid; } public void setitemsId (integer itemSid) {this.itemsid = itemsid; } public integer getItemsnum () {return itemsnum; } public void setitemsnum (integer itemsnum) {this.itemsnum = itemsnum; } item publik getItems () {item return; } public void setItems (item item) {this.items = item; } @Override Public String ToString () {return "orderDetail [id =" + id + ", ordersId =" + ordersId + ", itemsid =" + itemsid + ", itemsnum =" + itemsnum + "]"; }}2. Pemetaan file:
<!-Permintaan Pengguna dan Produk yang Dibeli-> <resultMap type = "com.luchao.mybatis.first.po.user" id = "ordersitemsResultMap"> <!-informasi pengguna-> <id kolom = "user_id" properti = "id" /<result column = "username" propertame = "User_id" Property = "ID" /<hasil Kolom = "username" UserName = "User =" User = "Kolom" "LEX" /<hasil Hasil = "UserName" UserName = "User =" User = "User" Property "=" column="address" property="address" /> <!-- Order information A user corresponds to multiple orders, use collection mapping--> <collection property="ordersList" ofType="com.luchao.mybatis.first.po.Orders"> <id column="id" property="id" /> <result column="user_id" property="userId" /> <result column="number" property="number" /> <result kolom = "createTime" properti = "createTime" /> <hasil kolom = "note" properti = "note" /> <!-rincian pesanan satu pesanan mencakup beberapa detail-> <collection properti = "orderDetails" ofType = "com.luchao." ID "Properti =" <poirt.po /orderDetail "> <id columa =" ID "ID" "" "" ID "" "ID" "" ID "ID" "ID" "ID" "ID" "ID" "ID" "ID" "ID" ID "ID" " kolom = "items_num" properti = "itemsnum" /> <hasil kolom = "orders_id" properti = "ordersid" /> <!-Informasi Produk Satu detail pesanan sesuai dengan satu produk-> <asosiasi properti = "item" JAVATYPE = "com.luchao =" "ITEM" "ITEMAN" "ITEM" "ITEM" "ITEM" "ITEM" "ITEM" "ITEM" "ITEM" "ITEM" "ITEM" "ITEM" "ITEM" "ITEM" ITEM " /> <colom hasil = "items_detail" properti = "detail"/> <column hasil = "items_price" properti = "harga"/> </association> </collection> </colly> </resultMap> <pilih id = "findOrderAditemmap" userMap = "oDersItemResultMap"> Select orders.*, User.User. orderDetail_id, orderDetail.items_id, ordeDetail.items_num, orderDetail.orders_id, items.id items_id, items.name items_name, items.detail items_detail, items.price items_price dari pesanan, pengguna, orderDetail, item -item di mana orders.user. orderDetail.items_id = items.id </pilih>
Dapat dilihat bahwa banyak-ke-banyak pada dasarnya adalah kombinasi dari satu-ke-banyak dan satu-ke-satu. Semua masalah kompleks pada dasarnya adalah kombinasi masalah sederhana. Selama Anda menganalisisnya dengan cermat, Anda dapat memahami prinsip -prinsipnya.
3. Antarmuka Mapper:
// Pesanan kueri, detail pesanan, dan informasi pengguna melalui daftar publik Hasil <user> findOrderAndItemMap () melempar pengecualian;
4. Kode Uji:
public void findOrderAntemMap () melempar Exception {// Dapatkan objek SQLSession SQLSession SQLSession = sqlSessionFactory.opensession (); // Buat objek OrderMapper, MyBatis secara otomatis menghasilkan mapper proxy orderMapper orderMapper = sqlSession.getMapper (ordermapper.class); // hubungi metode ordermapper untuk meminta pesanan dan daftar informasi pengguna <user> user = ordermapper.findoDerAndItemMap (); System.out.println (users.get (). Getorderslist (). Get () .getOrderDetails (). Get (). GetId ()); // System.out.println (orders.size ()); }Ringkasan kueri banyak-ke-banyak:
Persyaratan di atas menggunakan Hasil Hasil untuk memetakan catatan kueri ke POJO yang diperluas, yang sangat mudah untuk mengimplementasikan fungsi daftar terperinci, tetapi ini tidak dapat mencapai pemuatan yang tertunda. Gunakan HasilMap untuk memetakan daftar item terperinci yang dibeli oleh pengguna ke suatu objek, yang memungkinkan pemuatan malas. Menggunakan HasilMap adalah untuk fungsi -fungsi yang memiliki persyaratan khusus untuk pemetaan hasil kueri, seperti pemetaan persyaratan khusus ke dalam daftar termasuk beberapa daftar.
Ringkasan Hasil
1. Hasil Hasil:
memengaruhi:
Peta hasil kueri ke pojo sesuai dengan nama kolom SQL Pojo Atribut Name Konsistensi.
kesempatan:
Tampilan umum catatan terperinci, seperti ketika pengguna membeli detail produk dan menampilkan semua informasi kueri yang terkait di halaman, Anda dapat langsung menggunakan hasil Hasil untuk memetakan setiap catatan menjadi pojo, dan melintasi daftar (pojo dalam daftar) di halaman front-end.
2. Hasil Hasil:
Gunakan Asosiasi dan Pengumpulan untuk menyelesaikan pemetaan satu-ke-satu dan satu-ke-banyak (ada persyaratan pemetaan khusus untuk hasilnya).
asosiasi:
memengaruhi:
Peta informasi kueri yang terkait ke dalam objek PoJo.
kesempatan:
Untuk memfasilitasi kueri informasi terkait, Anda dapat menggunakan asosiasi untuk memetakan informasi pesanan terkait ke atribut POJO objek pengguna, seperti: meminta pesanan dan informasi pengguna terkait.
Menggunakan resultType tidak dapat memetakan hasil kueri ke atribut POJO dari objek POJO. Pilih apakah akan menggunakan HRESSTYPE atau RACKMAP sesuai dengan kebutuhan melintasi kueri yang ditetapkan hasil.
Koleksi:
memengaruhi:
Peta informasi kueri terkait ke dalam koleksi daftar.
kesempatan:
Untuk memfasilitasi informasi Asosiasi Traversal, Anda dapat menggunakan koleksi untuk memetakan informasi asosiasi ke pengumpulan daftar. Misalnya: Meminta Modul Lingkup Izin Pengguna dan menu di bawah modul, Anda dapat menggunakan koleksi untuk memetakan daftar modul untuk memetakan atribut daftar menu dari objek modul. Tujuan dari ini adalah untuk memfasilitasi permintaan traversal yang ditetapkan hasil kueri.
Jika Anda menggunakan HasilType, Anda tidak dapat memetakan hasil kueri ke koleksi daftar.
Konten di atas adalah Tutorial Pembelajaran Pemetaan Lanjutan MyBatis yang diperkenalkan kepada Anda oleh editor. Saya harap ini akan membantu Anda. Jika Anda ingin tahu lebih banyak, harap perhatikan situs web Wulin.com!