1. Asosiasi satu-ke-satu
1.1. Mengusulkan persyaratan
Informasi kelas kueri berdasarkan ID kelas (informasi dengan guru)
1.2. Buat tabel dan data
Buat tabel guru dan tabel kelas. Di sini kita berasumsi bahwa seorang guru hanya bertanggung jawab untuk mengajar satu kelas, sehingga hubungan antara guru dan kelas adalah hubungan satu-ke-satu.
Buat Table Teacher (T_ID int Key Auto_increment, t_name varchar ()); Buat kelas tabel (c_id int kunci primer auto_increment, c_name varchar (), teacher_id int); Ubah kelas tabel tambahkan kendala fk_teacher_id kunci asing (guru_id) Referensi guru (t_id); Masukkan ke nilai guru (t_name) ('guru'); Masukkan ke nilai guru (t_name) ('guru'); Masukkan ke kelas (c_name, teacher_id) values ('class_a',); Sisipkan ke kelas (c_name, teacher_id) values ('class_b', 2); Hubungan antara tabel adalah sebagai berikut:
1.3. Tentukan kelas entitas
1. Kelas guru, kelas guru adalah kelas entitas yang sesuai dengan tabel guru.
Paket Me.Gacl.Domain; /*** @author gacl* Tentukan kelas entitas yang sesuai dengan tabel guru*/guru kelas publik {// Tentukan atribut kelas entitas, sesuai dengan bidang dalam tabel guru int private int; // id ===> T_ID Nama String Privat; // name ===> t_name public int getId () {return id; } public void setid (int id) {this.id = id; } public string getName () {return name; } public void setName (name string) {this.name = name; } @Override Public String ToString () {return "Teacher [id =" + id + ", name =" + name + "]"; }}2. Kelas kelas, kelas kelas adalah kelas entitas yang sesuai dengan tabel kelas
Paket Me.Gacl.Domain; /*** @Author GACL* Tentukan kelas entitas yang sesuai dengan tabel kelas*/kelas kelas publik {// Tentukan atribut kelas entitas, sesuai dengan bidang dalam tabel kelas ID private int; // id ===> c_id nama string pribadi; // name ===> c_name /** * Ada bidang guru_id di tabel kelas, sehingga atribut guru didefinisikan dalam kelas kelas, * digunakan untuk mempertahankan hubungan satu-ke-satu antara guru dan kelas. Melalui atribut guru ini, Anda dapat mengetahui guru mana yang bertanggung jawab atas kelas ini*/ guru guru pribadi; publik int getId () {return id; } public void setid (int id) {this.id = id; } public string getName () {return name; } public void setName (name string) {this.name = name; } guru publik getteacher () {return teacher; } public void pemukiman (guru guru) {this.teacher = guru; } @Override Public String ToString () {return "class [id =" + id + ", name =" + name + ", Teacher =" + Teacher + "]"; }} 1.4. Tentukan file pemetaan SQL classmapper.xml
<? Xml Version = "." encoding = "utf-"?> <! Doctype mapper public "-// mybatis.org//dtd mapper .//en" "http://mybatis.org/dtd/mybatis--mapper.dtd"> <!-Menentukan namespace unik untuk mapper ini. Nilai namespace secara konvensional diatur ke nama paket + nama file pemetaan SQL, sehingga nilai namespace dapat dijamin unik. Misalnya, namespace = "me.gacl.mapping.classmapper" adalah me.gacl.mapping (nama paket) + classmapper (classmapper.xml file penghapusan file)-> <mapper namespace = "me.gacl.mapping.classmapper"> <!-informasi kelas kueri berdasarkan kelas kelas (dengan guru (dengan guru). Kueri Tabel Bersama Pilih * dari Kelas C, Guru T di mana c.teacher_id = t.t_id dan c.c_id =; ##. Jalankan dua kueri Pilih * dari kelas di mana c_id =; // Teacher_id = Pilih * dari guru di mana t_id =; // Gunakan guru yang diperoleh di atas-> <!-Metode 1: Hasil Nested: Gunakan peta hasil bersarang untuk memproses subset hasil bersama duplikat untuk merangkum data tabel gabungan (hapus duplikat data) dari Kelas C, Teacher t di mana c.teacher_id = t.t_id dan c. ParameterType = "int" resultMap = "classResultMap"> SELECT * dari kelas C, guru t di mana c.teacher_id = t.t_id dan c.c_id =#{id} </pilih> <!-gunakan hasil hasil untuk memetakan satu-ke-satu korespondensi antara kelas entitas dan bidang-> <resultMap = "Me.GeArt. property="id" column="c_id"/> <result property="name" column="c_name"/> <association property="teacher" javaType="me.gacl.domain.Teacher"> <id property="id" column="t_id"/> <result property="name" column="t_name"/> </association> </resultMap> <!-- Method 2: Nested query: Return the expected complex type by mengeksekusi pernyataan pemetaan SQL lainnya pilih * dari kelas di mana c_id =; SELECT * Dari guru di mana t_id = // adalah nilai guru_id yang diperoleh dari kueri sebelumnya-> <pilih id = "getSclass" parameTerType = "int" resultMap = "classResultMap"> Select * dari kelas di mana c_id =#{id} </pilih> <! Gunakan resultMap untuk memetakan satu ke-satu-satu korespondensi di antara class estity dan field </soil> <! type = "me.gacl.domain.classes" id = "classResultMap"> <id properti = "id" kolom = "c_id"/> <properti hasil = "name" kolom = "c_name"/> <asosiasi properti = "Teacher" column = "Teacher_id" Select = "GetTeacher"/</HasilsMap> <Syekkan = "Teacher_ID" GetTeach "/PARUSPER"/</RAUSTMAP> <PILITER " resultType = "me.gacl.domain.teacher"> pilih t_id id, nama t_name dari guru di mana t_id =#{id} </select> </mapper> Register classmapper.xml di file conf.xml
<Phappers> <!- Daftarkan file ClassMapper.xml. classmapper.xml terletak di paket me.gacl.mapping, jadi sumber daya ditulis sebagai me/gacl/pemetaan/classmapper.xml-> <mapper resource = "me/gacl/pemetaan/classmapper.xml"/> </pappers>
1.5. Tulis kode uji unit
Paket Me.Gacl.Test; impor saya.gacl.domain.classes; impor me.gacl.util.mybatisutil; Impor org.apache.Ibatis.Session.SQLSession; impor org.junit.test; tes kelas publik {@test public void testGetClass () {sqlSession sqlSession = mybatisutil.getsqlsession (); /** * Peta string identifikasi SQL, * me.gacl.mapping.classmapper adalah nilai atribut namespace dari tag mapper dalam file classmapper.xml, * getClass adalah nilai atribut ID dari tag pilih. SQL yang akan dieksekusi dapat ditemukan melalui nilai atribut ID dari tag pilih */Pernyataan string = "Me.Gacl.Mapping.classmapper.getClass"; // Memetakan Rekaman Identifikasi SQL//Eksekusi Tabel Query (Taneal (Penjelasan (Penjelasan (Penjelasan/Kelas/Kembali CLASSE CLUX CLAZZ = SQLSESSES. SQL menggunakan sqlsession sqlsession.close (); System.out.println (clazz); // Cetak Hasil: Kelas [id =, name = class_a, guru = guru [id =, name = guru]]} @test public void testgetClass () {sqlsession sqlsession = mybatisutil.getSqLSession (); /** * Peta string identifikasi SQL, * me.gacl.mapping.classmapper adalah nilai atribut namespace dari tag mapper dalam file classmapper.xml, * getClass adalah nilai atribut ID dari tag pilih. SQL yang akan dieksekusi dapat ditemukan melalui nilai atribut ID dari tag pilih */Pernyataan string = "me.gacl.mapping.classmapper.getClass"; // Memetakan string identifikasi SQL // Eksekusi Operasi Kueri dan secara otomatis merangkum hasil kueri ke dalam kelas -kelas yang dikembalikan kelas CLUZZ = SQLSESSES.SESESTONE. SQLSession untuk mengeksekusi SQL, Anda perlu menutup SQLSession sqlsession.close (); System.out.println (clazz); // hasil cetak: kelas [id =, name = class_a, guru = guru [id =, name = guru]]}} 1.6. Ringkasan kueri asosiasi satu-ke-satu mybatis
Mybatis menggunakan tag asosiasi untuk menyelesaikan pertanyaan asosiasi satu-ke-satu. Properti yang tersedia untuk tag asosiasi adalah sebagai berikut:
• Properti: Nama properti objek
• Javatype: Jenis atribut objek
• Kolom: Nama bidang kunci asing yang sesuai
• Pilih: Gunakan kueri lain untuk merangkum hasilnya
2. Asosiasi satu-ke-banyak
2.1. Mengusulkan persyaratan
Meminta informasi kelas yang sesuai menurut ClassID, termasuk siswa dan guru
2.2. Buat tabel dan data
Dalam demonstrasi permintaan korelasi satu-ke-satu di atas, kami telah membuat tabel kelas dan tabel guru, jadi di sini kami membuat tabel siswa lain
Buat Table Student (S_ID int Key Primary Auto_increment, s_name varchar (20), class_id int); masukkan ke dalam nilai siswa (s_name, class_id) ('student_a', 1); masukkan ke dalam nilai siswa (s_name, class_id) nilai ('Student_B', 1); Nilai Siswa (S_NAME, CLASS_ID) ('Nilai'); Nilai ('student_d', 2); masukkan ke dalam nilai siswa (s_name, class_id) ('student_e', 2); masukkan ke dalam nilai siswa (s_name, class_id) nilai ('student_f', 2); 2.3. Tentukan kelas entitas
1. Kelas Siswa
Paket Me.Gacl.Domain; /*** @Author GACL* Tentukan kelas entitas yang sesuai dengan tabel siswa*/kelas publik siswa {// Tentukan atribut, sesuai dengan bidang dalam tabel mahasiswa int private int id; // id ===> S_ID Nama String Privat; // name ===> s_name int int getId () {return id; } public void setid (int id) {this.id = id; } public string getName () {return name; } public void setName (name string) {this.name = name; } @Override Public String ToString () {return "Student [id =" + id + ", name =" + name + "]"; }} 2. Ubah Kelas Kelas, Tambahkan Atribut Siswa <Sahasiswa> Siswa, dan gunakan Atribut Koleksi <Sahasiswa> Daftar untuk mewakili siswa yang dimiliki oleh kelas, sebagai berikut:
Paket Me.Gacl.Domain; impor java.util.list; /*** @Author GACL* Tentukan kelas entitas yang sesuai dengan tabel kelas*/kelas kelas publik {// Tentukan atribut kelas entitas, sesuai dengan bidang dalam tabel kelas ID private int; // id ===> c_id nama string pribadi; // name ===> c_name /** * Ada bidang guru_id di tabel kelas, sehingga atribut guru didefinisikan dalam kelas kelas, * digunakan untuk mempertahankan hubungan satu-ke-satu antara guru dan kelas. Melalui atribut guru ini, Anda dapat mengetahui guru mana yang bertanggung jawab atas kelas ini*/ guru guru pribadi; // Gunakan Atribut Koleksi <Sahasiswa> Daftar untuk mewakili siswa yang dimiliki oleh Daftar Privat Kelas <Sahasiswa> Siswa; publik int getId () {return id; } public void setid (int id) {this.id = id; } public string getName () {return name; } public void setName (name string) {this.name = name; } guru publik getteacher () {return teacher; } public void pemukiman (guru guru) {this.teacher = guru; } public void pemukiman (guru guru) {this.teacher = guru; } Daftar Publik <Sahasiswa> getStudents () {return siswa; } setStudents public void (Daftar <Sahasiswa> Siswa) {this.students = Siswa; } @Override Public String ToString () {return "class [id =" + id + ", name =" + name + ", Teacher =" + Teacher + ", siswa =" + Siswa + "]"; }} 2.4. Ubah file pemetaan SQL classmapper.xml
Tambahkan informasi pemetaan SQL berikut
<!-Permintaan Informasi kelas yang sesuai menurut ClassID, termasuk siswa dan guru-> <!-Metode 1: Hasil Nested: Gunakan peta hasil bersarang untuk memproses subset hasil bersama yang diulang, pilih * dari Kelas C, Teacher T, Siswa S di mana C.teacher_id = T.T_ID dan C.C_ID = S.Class_id dan C.C_ID =-> <SELECT "ID" resultMap = "classResultMap"> pilih * dari kelas C, guru t, siswa di mana c.teacher_id = t.t_id dan c.c_id = s.class_id dan c.c_id =#{id} </ pilih> <resultMap type = "me.gacl.domain.classes" id = "classResultMap" "colume" colume "colume" colume "colume =" colume "colume =" id = "id =" classResultMap "<" colume "colume" colol "colol" colume = "id =" classResultMap "<" colol "colol" colol "colol" colume = "clume" colume = "id =" classReSultMap "<" colol "colol" colol "colol" colol "colol" colol "colol" clumeR " kolom = "c_id"/> <properti result = "name" column = "c_name"/> <asosiasi properti = "guru" kolom = "guru_id" javatype = "me.gacl.domain.teacher"> <id properti = "id colume =" t_id "/> <hasil properti =" nama "kolom =" t_name "/</</typoly </Typype> <hasil Properti =" nama "kolom =" T_NAME "/> </THE COLUMENT </THEPIES> OF! OF Hasil =" Nama "kolom =" T_NAME "//</</Typypees> </Typype </Of Property =" Name "COLMOM =" T_NAME "INTION" INTIES- </THE PIPPAY> Properti = "Siswa" OfType = "Me.Gacl.Domain.Student"> <id properti = "id" kolom = "s_id"/> <properti hasil = "name" column = "s_name"/> </collection> </resultMap> <!- Metode 2: Nested Query: kembalikan tipe kompleks yang diharapkan dengan mengeksekusi SQL SQL yang lain. SELECT * Dari guru di mana t_id = // adalah nilai guru_id yang diperoleh dengan kueri sebelumnya pilih * dari siswa di mana class_id = // adalah nilai bidang c_id yang diperoleh dengan kueri pertama -> <pilih id = "getSclass" parameterType = "int" resultMap = "classResultMap"> Select * dari class where c_id =#{#{#{classResultMap "> dari class where c_id =#{#{#{classResultMap"> dari class where c_id =#{#{#{classReSultMap "> dari class where c_id =#{#{{classReSultMap" type="me.gacl.domain.Classes" id="ClassResultMap"> <id property="id" column="c_id"/> <result property="name" column="c_name"/> <association property="teacher" column="teacher_id" javaType="me.gacl.domain.Teacher" select="getTeacher"></association> <collection property="students" OfType = "Me.Gacl.Domain.Student" kolom = "c_id" select = "getStudent"> </collection> </resultMap> <pilih id = "getTeacher" parameTerType = "int" resultType = "me.gacl.domain.teacher"> Pilih t_id id, t_name name dari guru dari guru di mana = oDer. id = "getStudent" parameTerType = "int" resultType = "me.gacl.domain.student"> SELECT S_ID ID, nama s_name dari siswa di mana class_id =#{id} </pilih> 2.5. Tulis kode uji unit
Paket Me.Gacl.Test; impor saya.gacl.domain.classes; impor me.gacl.util.mybatisutil; Impor org.apache.Ibatis.Session.SQLSession; impor org.junit.test; tes kelas publik {@test public void testGetClass () {sqlSession sqlSession = mybatisutil.getsqlsession (); /** * Peta string identifikasi SQL, * me.gacl.mapping.classmapper adalah nilai atribut namespace dari tag mapper dalam file classmapper.xml, * getClass adalah nilai atribut ID dari tag pilih. SQL yang akan dieksekusi dapat ditemukan melalui nilai atribut ID dari tag pilih */Pernyataan string = "Me.Gacl.Mapping.classmapper.getClass"; // Memetakan Rekaman Identifikasi SQL//Eksekusi Tabel Query (Taneal (Penjelasan (Penjelasan (Penjelasan/Kelas/Kembali CLASSE CLUX CLAZZ = SQLSESSES. SQL menggunakan sqlsession sqlsession.close (); // Cetak hasilnya: kelas [id =, name = class_a, guru = guru [id =, name = guru], siswa = [siswa [id =, name = student_a], siswa [id =, name = student_b], siswa [id =, name = student_c]]] System.out.println (clazz); } @Test public void testGetClass () {sqlSession sqlSession = mybatisutil.getSqlSession (); /** * Peta string identifikasi SQL, * me.gacl.mapping.classmapper adalah nilai atribut namespace dari tag mapper dalam file classmapper.xml, * getClass adalah nilai atribut ID dari tag pilih. SQL yang akan dieksekusi dapat ditemukan melalui nilai atribut ID dari tag pilih */Pernyataan string = "Me.Gacl.Mapping.classmapper.getClass"; // Memetakan Rekaman Identifikasi SQL//Eksekusi Tabel Query (Taneal (Penjelasan (Penjelasan (Penjelasan/Kelas/Kembali CLASSE CLUX CLAZZ = SQLSESSES. SQL menggunakan sqlsession sqlsession.close (); // Cetak hasilnya: kelas [id =, name = class_a, guru = guru [id =, name = guru], siswa = [siswa [id =, name = student_a], siswa [id =, name = student_b], siswa [id =, name = student_c]]] System.out.println (clazz); }} 2.6. Ringkasan kueri asosiasi satu-ke-banyak mybatis
MyBatis menggunakan tag koleksi untuk menyelesaikan pertanyaan asosiasi satu-ke-banyak, dan atribut ofType menentukan jenis elemen objek dalam koleksi.
Tentang Mybatis Learning Tutorial (V) - Saya akan memperkenalkan banyak hal kepada Anda tentang mengimplementasikan kueri tabel asosiasi, saya harap ini akan membantu Anda!