Dalam pengembangan proyek, kita sering menghadapi situasi di mana nama lapangan dalam tabel dan nama atribut dari kelas entitas yang sesuai dari tabel mungkin tidak persis sama. Editor berikut akan menunjukkan kepada Anda bagaimana menyelesaikan masalah konflik dari berbagai nama lapangan dan kelas entitas dalam kasus ini. Teman yang tertarik akan belajar bersama.
1. Siapkan tabel dan data yang akan digunakan untuk demonstrasi
CREATE TABLE orders(order_id INT PRIMARY KEY AUTO_INCREMENT,order_no VARCHAR(20), order_price FLOAT);INSERT INTO orders(order_no, order_price) VALUES('aaaa', 23);INSERT INTO orders(order_no, order_price) VALUES('bbbb', 33);INSERT INTO orders(order_no, order_price) VALUES('cccc', 22); 2. Tentukan kelas entitas
Paket ME.GACL.Domain;/*** @Author GACL*Tentukan kelas entitas yang sesuai dengan tabel pesanan*/pesanan kelas publik {/*** Buat pesanan tabel (order_id int utama auto_increment, order_no varchar (), order_price float);*////name attribute; // id ===> order_idprivate string orderno; // orderno ===> order_noprivate harga float; //price===>order_pricepublic int getId() {return id;}public void setId(int id) {this.id = id;}public String getOrderNo() {return orderNo;}public void setOrderNo(String orderNo) {this.orderNo = orderNo;}public float getPrice() {return price;}public void setPrice(float price) {this.price = harga;}@overridepublic string toString () {return "order [id =" + id + ", ordno =" + orderno + ", price =" + price + "]";}} 3. Tulis kode tes
3.1. Tulis file pemetaan SQL XML
1. Buat file ordermapper.xml. Konten ordermapper.xml adalah sebagai berikut:
<? Xml Version = "." encoding = "utf-"?> <! Doctype mapper public "-// mybatis.org//dtd mapper .//en" "http://mybatis.org/dtd/mybatis-mapper.dtd"> < Nilai namespace secara konvensional diatur ke nama paket + nama file peta SQL, sehingga nilai namespace dapat dijamin unik. Misalnya, namespace = "me.gacl.mapping.orderMapper" adalah me.gacl.mapping (nama paket) + ordermapper (ordermapper.xml sufiks penghapusan file)-> <mapper namespace = "me.gacl.mapping.mapping"> <!-
Objek pesanan diperoleh berdasarkan kueri ID. Menggunakan kueri ini tidak dapat meminta hasil yang kami inginkan. Ini terutama karena nama atribut kelas entitas tidak sesuai dengan nama bidang database, sehingga catatan yang sesuai tidak dapat ditanya.
-> <pilih id = "getOrderById" parameTerType = "int" resultType = "me.gacl.domain.order"> pilih * dari pesanan di mana order_id =#{id} </pilih> <!- Objek pesanan diperoleh berdasarkan kueri ID. Dengan menggunakan kueri ini, kami biasanya dapat meminta hasil yang kami inginkan.
Ini karena kami akan memberikan alias kueri dengan nama atribut yang sama dengan nama atribut kelas entitas, sehingga nama atribut kelas entitas dan nama bidang dalam hasil kueri dapat sesuai satu per satu ke satu.
-> <pilih id = "selectorder" parameTerType = "int" resultType = "me.gacl.domain.order"> pilih order_id id, order_no orderno, order_price harga dari pesanan di mana order_id =#{id} </pilih> <!- Menurut kueri ID, kita bisa mendapatkan objek pesanan. Dengan menggunakan kueri ini, kami dapat meminta hasil yang kami inginkan secara normal. Ini karena kami memetakan korespondensi satu-ke-satu antara nama atribut kelas entitas dan nama bidang tabel melalui <RancesMap>->
<Pilih id = "selectorderResultMap" parameTerType = "int" resultMap = "orderResultMap"> pilih * dari pesanan di mana order_id =#{id} </select> <!-memetakan korespondensi antara nama atribut kelas entitas dan nama bidang tabel melalui <resultMap>-Memetakan korespondensi-KECAPAN PERTAMA KEDIRIAN PENDINGAN DAN NAMA TAING TABLE MELALUI <RACESMAP>-Memetakan korespondensi KECAPAN KECINGASI PERTANIAN PERTANIAN PENDIRIAN DAN KEDINGAN TABLE MELALUS TABLEMAP>-Memetakan korespondens Properti ID-> <id properti = "id" kolom = "order_id"/> <!-Memetakan bidang kunci non-primer menggunakan properti hasil-> <properti hasil = "orderno" kolom = "order_no"/> <properti hasil = "harga" kolom = "order_price"/> </resultMap> </mapper> 2. Daftarkan file pemetaan ordermapper.xml di file conf.xml
<petpers> <!- Daftarkan file ordermapper.xml. Ordermapper.xml terletak di paket me.gacl.mapping, jadi sumber daya ditulis sebagai me/gacl/pemetaan/ordermapper.xml-> <mapper resource = "me/gacl/pemetaan/ordermapper.xml"/> </pappers>
3.2. Tulis kode uji unit
package me.gacl.test;import me.gacl.domain.Order;import me.gacl.util.MyBatisUtil;import org.apache.ibatis.session.SqlSession;import org.junit.Test;public class Test {@Testpublic void testGetOrderById(){SqlSession sqlSession = Mybatisutil.getsqlSession ();/*** String identifikasi untuk pemetaan SQL,* Me.Gacl.Mapping.OrderMapper adalah nilai atribut namespace dari tag mapper dalam file ordermapper.xml,* getorderbyid adalah nilai atribut ID dari tag terpilih. Melalui nilai atribut ID dari tag SELECT, Anda dapat menemukan SQL untuk dieksekusi*/string pernyataan = "me.gacl.mapping.ordermapper.getOrderById"; // Memetakan SQL Identity String // Eksekusi tabel ordo dan order ordo (order order (order (order order (order order (order order (order order (order order (order order (order order (order order (order order order (order order order (sqlsesses. SQL Menggunakan SQLSession, Anda perlu menutup SQLSESSIONSQLSESSION.CLOSE (); System.out.println (pesanan); // hasil cetak: null, yaitu, tidak ada catatan yang sesuai ditemukan} @testpublic void testGetOrderById () {sqlsession sqlsession = mybatisutil dari tag -mapperson ();/*** peta string identifikasi sql,* me.gacl.mapping (); file ordermapper.xml, * selectorder adalah nilai atribut ID dari tag pilih. Melalui nilai atribut ID dari tag pilih, Anda dapat menemukan SQL untuk dieksekusi. */Pernyataan String = "Me.Gacl.Mapping.OrderMapper.Selectorder"; // Peta SQL Identification String // Jalankan operasi kueri, dan secara otomatis merangkum hasil kueri ke dalam objek pesanan dan mengembalikan pesanan pesanan = sqlsession.selectone (pernyataan); // query catatan dengan id dalam tabel pesanan // setelah eksekutasi sql (pernyataan); // query catatan dengan id dalam tabel pesanan // setelah eksekutif sql sql sql, Anda perlu catatan dengan ID dalam tabel pesanan // setelah eksekutasi sql sql sql SQL, menggunakan sleeds dengan ID dalam tabel pesanan // setelah eksekutasi sql SQL SQLESESSIES Sqlsessionsqlsession.close (); System.out.println (pesanan); // hasil cetak: order [id =, orderno = aaaa, price =.]}@Testpublic void testgetOrderById () {sqlsession sqlSession = mybatisutil.getsqlsession ();/*** peta sqlSession,* me.mAping. Tag mapper dalam file ordermapper.xml. * SelectorDerResultMap adalah nilai atribut ID dari tag pilih. Melalui nilai atribut ID dari tag pilih, Anda dapat menemukan SQL untuk dieksekusi. */Pernyataan String = "Me.Gacl.Mapping.OrderMapper.SelectorDerResultMap"; // Memetakan SQL Identification String // Eksekusi Operasi Kueri, dan secara otomatis merangkum hasil kueri ke dalam objek pesanan dan mengembalikan pesanan Anda = SQLSESSESS.SELECTONE (Pernyataan,); // Kueri Rekaman dengan ID dalam Pesanan You Close. Sqlsessionsqlsession.close (); System.out.println (pesanan); // Cetak Hasil: Pesan [id =, orderno = aaaa, harga =.]}} Hasil pelaksanaan tes unit:
1. Metode TestGetOrderById mengembalikan nol setelah menjalankan kueri.
2. Setelah metode testGetOrderById2 dan metode testGetOrderById3 menjalankan kueri, Anda bisa mendapatkan hasil yang diinginkan secara normal.
4. Ringkasan
Kode pengujian di atas menunjukkan masalah bahwa ketika nama atribut di kelas entitas dan nama bidang dalam tabel tidak konsisten, hasil yang sesuai tidak dapat ditanya saat menggunakan mybatis untuk operasi kueri, dan dua metode diadopsi untuk masalah:
Solusi 1: Tentukan alias nama bidang dalam pernyataan Query SQL, sehingga alias nama bidang konsisten dengan nama atribut kelas entitas, sehingga nama bidang tabel dapat sesuai satu per satu dengan nama atribut kelas entitas. Metode ini memecahkan hubungan pemetaan antara nama bidang dan nama atribut dengan mendefinisikan alias dalam pernyataan SQL.
Solusi 2: Peta korespondensi satu-ke-satu antara nama bidang dan nama atribut kelas entitas melalui <RancesMap>. Metode ini menggunakan solusi yang disediakan oleh MyBatis untuk menyelesaikan hubungan pemetaan antara nama bidang dan nama atribut.
Di atas adalah tutorial pembelajaran mybatis yang diperkenalkan kepada Anda oleh editor (iv) - cara menyelesaikan konflik antara nama lapangan dan nama atribut kelas entitas dengan cepat. Saya harap ini akan membantu semua orang. Jika Anda memiliki pertanyaan, silakan tinggalkan saya pesan dan editor akan membalas semua orang tepat waktu. Terima kasih banyak atas dukungan Anda ke situs web Wulin.com!