Hubungan yang kami pelajari saat ini adalah hubungan satu-ke-satu dan hubungan satu-ke-banyak.
1. Hubungan satu-ke-satu
Mari kita jelaskan melalui contoh. (Seorang istri sesuai dengan seorang suami).
1) Informasi Basis Data
Buat tabel t_wife (id int primer auto_increment, istri_name varchar (), fk_husband_id int); buat tabel t_husband (id int primer auto_increment, husta_name varchar ()); masukkan ke dalam nilai t_husband (null, 'hello'); masukkan ke dalam nilai t_wife (null, ')
2) Kode JavaBean yang sesuai
Meskipun hanya ada satu kunci asing yang dikonfigurasi oleh satu pihak dalam database, hubungan satu-ke-satu ini adalah hubungan dua arah.
Headbean.java
Paket com.cy.mybatis.beans; impor java.io.serializable;/*** satu ke satu*@author acer **/kelas publik headbean mengimplementasikan Serializable {private static final long serialversionuid = l; private integer ID; name string pribadi; istri wifebean private; {super (); this.id = id; this.name = name; this.wife = istri;} public integer getId () {return id;} public void setid (integer id) {this.id = id;} public getName () {return name;} public void setName (string name) {this.name () {return name; setWife (istri istri) {this.wife = istri;}@overridepublic string toString () {return "husin [id =" + id + ", name =" + name + ", istri =" + istri + "]";}} Wifebean.java
package com.cy.mybatis.beans;import java.io.Serializable;/*** one to one* @author acer**/public class WifeBean implements Serializable{private static final long serialVersionUID = L;private Integer id;private String name;private HusbandBean husband;public WifeBean() {super();}public WifeBean(Integer id, String name, HusbandBean husband) {super (); this.id = id; this.name = name; this.husband = husin;} public integer getId () {return id;} public void setid (integer id) {this.id = id;} public getName () {return name;} public void setname (name string) {this.no.name () {return name; void setHusband (suami suami) {this.husband = husband;}@overridepublic string toString () {return "wife [id =" + id + ", name =" + name + ", husband =" + husband + "];}} 3) Selanjutnya, buat dua antarmuka, husunmapper dan wifemapper.
Suami
Paket com.cy.mybatis.mapper; import com.cy.mybatis.beans.husbandbean; antarmuka publik husa husa SOBANTBEAN SELECTHUSBANDANDWIFE (INT ID) melempar Exception;}
4) Definisikan file hussimapper.xml
<? Xml Version = "." encoding = "utf-"?> <! Doctype mapper public "-// mybatis.org/dtd mapper." "http://mybatis.org/dtd/mybatis-mapper.dtd"><mapper namespace =" com.cy.mybatis.mapper.husbandmapper "> <resultMap type =" headbean "id =" headandwife "> <id properti =" id "colol". " properti = "name" column = "name" javatype = "java.lang.string"/> <!- asosiasi asosiasi tipe kompleks; Banyak hasil yang akan dikemas ke dalam jenis asosiasi peta hasil tertanam ini, atau merujuk ke kolom = "ID" ID di sini mengacu pada ID kunci utama dari tabel T_WIFE. Istri kueri ini, jadi ada metode dalam mapper istri-> <asosiasi properti = "istri" kolom = "id" javatype = "wifebean" select = "com.cy.mybatis.mapper.wifemapper.selectwifebebebebebebyhusbandid"> </asosiasi yang diharapkan dari class yang diharapkan. -> <pilih id = "selecthusbandById" resultType = "headbean"> pilih * dari t_husband di mana id =#{id} </select> <!-Referensi nama Hasil Referensi Hasil Eksternal. Mengembalikan koleksi. -> <pilih id = "selecthusbandandwife" resultMap = "hustadwife"> pilih * dari t_husband di mana id =#{id} </pilih> </mapper>Ada metode di wifemapper.xml
<? Xml Version = "." encoding = "utf-"?> <! Doctype mapper public "-// mybatis.org/dtd mapper." "http://mybatis.org/dtd/mybatis-mapper.dtd"><mapper namespace =" com.cy.mybatis.mapper.wifemapper "> <Select Id =" SelectWifebyHusBandID "resultType =" wifean "> Select * dari T_WIFE di mana =" wifeBean "> dari T_WIFFEDE/IDEWANDIDEDIDEDIDEDEDIDEDIDEDEDIDEDIDEDEDEDEDEDEDEDEDEDEDEDIDEDEDEDEDEDIDEDEDIDEDEDIDEDEDIDEDEDIDEDEDIDEDIPEDIDEDIDIDEDIDIDEDIDIDIDEDIDIDIDEDIDEDIDEDIDEDIDEDS =" </papper>
5) Tulis implementasi
Paket com.cy.mybatis.service; impor org.apache.ibatis.Session.sqlsession; impor com.cy.mybatis.beans.husbandbean; impor com.cy.mybatis.mapper.husbandmapper; public com.cy.mybatis.tools.dbtools; {selecthusbandandwife ();} private static void selecthusbandandwife () {sqlsession sesi = dbtools.getsession (); husband hm = session.getmapper (headmapper.class); coba {headbean husband = hm.selecthusbandandwife (); system.out. {E.PrintStackTrace ();}}} Catatan: Kelas alat ditulis dalam bab sebelumnya, yang sangat mirip dengan yang ditetapkan atas dasar kemarin.
Melihat:
Mybatis sebenarnya beroperasi di XML. Semua metode kami didefinisikan secara langsung dalam XML. Menulis antarmuka hanya untuk lebih sesuai dengan pemikiran tiga lapis kami. Jika Anda tidak menulis antarmuka, Anda dapat secara langsung mengoperasikan metode di XML melalui sesi.
Selama ada metode dalam XML, dapat digunakan, dan metode panggilan adalah: nama metode namespace+;
Saat menggunakan hasil untuk pengecualian, pastikan untuk memastikan bahwa nama atribut Anda sama dengan nama bidang;
Jika tidak sama, gunakan hasil hasil.
2. Hubungan satu-ke-banyak
Mari kita jelaskan melalui contoh. (Satu kunci sesuai dengan beberapa tombol).
2.1) Tidak ada data yang ditambahkan di sini dalam informasi database, kami menggunakan batch untuk menambahkan data
Buat tabel t_key (id int primer auto_increment, key_name varchar (), fk_lock_id int int); Buat tabel t_lock (id int primer auto_increment, lock_name varchar ());
2.2) Kelas Entitas
Keybean.java
Paket com.cy.mybatis.beans; import java.io.serializable;/*** banyak -ke -banyak***/Kelas publik Keybean mengimplementasikan serial {private static final long serialversionuid = l; id private integer; kunci string pribadi; kunci lockbean public; public keybean () {); {super (); this.id = id; this.key = key; this.lock = lock;} public integer getId () {return id;} public void setid (integer id) {this.id = id;} public string getKey () {return key;} public void setKey (string key) {this.key = key; setLock (lockbean lock) {this.lock = lock;}@overridepublic string toString () {return "keybean [id =" + id + ", key =" + key + ", lock =" + lock + "];}} lockbean.javapacage com.cycy.mybatis.beans; java.util.list;/*** onetomany***/kelas publik Lockbean mengimplementasikan serial {private static final long serialversionuid = l; private integer id; private string lock; daftar pribadi <keybean> keys; lockbean publik () {super ();} public lockbean (integer id, string lock, public lockbean () {superbean ();} public lockbean (integer id, string lock, string, string, string,) {superbean ();} public lockbean (integer ID, string lock, string, string, string,) {superbean () <); id; this.lock = lock; this.keys = keys;} public integer getId () {return id;} public void setid (integer id) {this.id = id;} public string getLock () {return lock;} public void setLock (string lock) {this.lock = lock; {public list <public ceybean (string lock) {this.lock = lock; {public list <public keybean (string lock) {this.lock = lock; {public list <public keybean (string lock) {this.lock = lock;} daftar publik <public keybean (string lock) {this.lock = lock;} daftar publik <public keyBEn setKeys (Daftar <YyBean> keys) {this.keys = keys;}@overridepublic string toString () {return "lockbean [id =" + id + ", keys =" + keys + ", lock =" + lock + "]";}} 2.3) Membangun antarmuka
Keymapper.javapackage com.cy.mybatis.mapper; import java.util.list; impor org.apache.ibatis.annotations.param; import com.cy.mybatis.beans.keybean; antarmuka publik keymapper {/** Tambah kunci dalam Batch* @return* diawasi ke public interface {/* BatchSavekeys (@param ("Keys") Daftar <KeyBean> keys);} lockmapper.javapackage com.cy.mybatis.mapper; import org.apache.iathis.annotations.param; import com.cy.mybatis.beans.lockbean; lockmapper public {public @public @pary saveLock(@Param("lock")LockBean lock);/*** Query the information of the lock based on the ID* @param id* @return*/public LockBean findLockById(int id);/*** Query the information of the lock and key based on the ID* onemany* @param id* @return*/public LockBean findLockAndKeys(int id);} 2.4) Buat file XML
Keymapper.xml
<? Xml Version = "." encoding = "utf-"?> <! Doctype mapper public "-// mybatis.org/dtd mapper." "http://mybatis.org/dtd/mybatis-mapper.dtd"><mapper namespace =" com.cy.mybatis.mapper.keymapper "> <resultMap id =" keymap "type =" keybean "> <id properti =" id "colom =" id colum = "jave =" ID "ID" ID "ID" JAB "JAV" JAVA "JAVA. Properti = "Key" Column = "key_name" javatype = "java.lang.string"/> </resultMap> <!-koleksi adalah elemen yang digunakan untuk traversal (diperlukan), pendukung array, daftar, set-> <!-Item mewakili alias ketika setiap elemen dalam koleksi diulang. -> <!-Pemisah menunjukkan simbol apa yang digunakan sebagai pemisah antara setiap iterasi. -> <masukkan id = "BatchSavekeys"> masukkan ke dalam nilai t_key <freeach collection = "keys" item = "key" puparator = ","> (null,#{key.key},#{key.lock.id}) </foreach> </insert> <pilih id = "findkeysbylock" hancur = "keym =" keym = "keym =" KEMH = "keym =" KEYM = "KEYM =" KEYM = "KEYM =" KEYM = "KEYM =" KEYM = "KEYM =" KEYM = "KEYM =" KEYM = "KEYM =" KEYM = "KEYM =" KEYM = "KEYM =" #{ID} </select> </mapper> lockmapper.xml <? xml version = "." encoding = "utf-"?> <! Doctype mapper public "-// mybatis.org/dtd mapper." "http://mybatis.org/dtd/mybatis-mapper.dtd"><mapper namespace =" com.cy.mybatis.mapper.lockmapper "> <!-tipe pengembalian khusus-> <resultmap =" lockmap "type =" Lockbean "> <" id custom = " javatype = "java.lang.integer"/> <properti result = "lock" kolom = "lock_name" javatype = "java.lang.string"/> <properti hasil = "lock" kolom = "lock_name" javatype = "java.lang.string"/> <property = "iDys" kolom "KEYS" KEYS " SELECT = "com.cy.mybatis.mapper.keymapper.findkeysbylockid"> </collection> </RancesMap> <masukkan id = "savelock"> masukkan ke dalam nilai t_lock (null, #{lock.lock}) </masukkan <pilih id = "findlockbyid" hasil {{{{{{{{{{{{pilih t findlock " id = "findlockandkeys" resultMap = "lockandkeysmap"> pilih * dari t_lock where id = #{id} </select> </mapper> 2.5) Implementasi
Paket com.cy.mybatis.service; import java.util.arraylist; impor java.util.list; impor org.apache.iatis.Session.sqlsession; import com.cy.mybatis.bean.keybean; impor com.cy.mybatis.beans.mybapper; com.cy.mybatis.mapper.lockmapper; import com.cy.mybatis.tools.dbtools; kelas publik onetomanyservice {public static void main (string [] args) {// savelock (); // batchsavekeys (); findLockAndKeys();}private static void findLockAndKeys() {SqlSession session = DBTools.getSession();LockMapper lm = session.getMapper(LockMapper.class);LockBean lock = lm.findLockAndKeys();System.out.println(lock);}private static void batchSaveKeys() {SqlSession session = Dbtools.getSession (); lockmapper lm = session.getMapper (lockmapper.class); keymapper km = session.getMapper (keymapper.class); lockbean lock = lm.findlockbyId (); daftar <keybean> keys = new arrayList <KeyBean> (); untuk (untuk i = i = i = i = new aRayList <KeyBean> (); untuk (untuk i = i = i = i =) <KeyBean (KEYBEAN <KEYBEAN> (); untuk (untuk i = i = i = i =) <KeyBean (KEYBEAN (KEYBEAN> (untuk (); untuk (untuk i = i = (KEYBEAN> iNRAULE <KEYBEAN <KEYBEAN> (); "key"+i, lock);keys.add(key);}km.batchSaveKeys(keys);session.commit();}private static void saveLock() {SqlSession session = DBTools.getSession();LockMapper lm = session.getMapper(LockMapper.class);LockBean lock = new LockBean(null, "lock", null); lm.savelock (lock); session.commit ();}} Hasilnya menunjukkan:
3. Operasi Batch dan Pagination
Di sini saya akan menggunakan pengguna dari bab sebelumnya dan menulis kode utama.
Pertama -tama tentukan objek paging.
Paket com.cy.mybatis.beans; import java.util.list;/*** Tentukan objek pagination** @penulis**/kelas publik pager {private int pageno; // nomor halaman saat ini private int pagetotal pagetotal;//nomor halaman total intert seluruh rowstotal; // total jumlah entri pagetotal; Data yang dikembalikan public int getPageno () {return pageno;} public void setPageno (int pageno) {this.pageno = pageno;} public int getPagetotal () {return pagetotal;} public void setPagetotal (int pagetotal) {pagetotal; getrowstotal () {return rowstotal;} public void setrowstotal (int rowstotal) {this.rowstotal = rowstotal; pagetotal = rowstotal % pageSize ==? Rowstotal / PageSize: Rowstotal / PageSize +;} public int getPageSize () {return pageSize;} public void setPagesize (int pageSize) {this.pagesize = pageSize;} Public List <?> getList () {list return;} public void setList (list <? Daftar Public <? toString () {return "pager [pageno =" + pageno + ", pagetotal =" + pagetotal + ", rowstotal =" + rowstotal + ", pagesize =" + pagesze + ", list =" + list + "]";}} usermapper.java antarmace. Paket com.cy.mybatis.mapper; import java.util.list; import java.util.map; impor org.apache.iatis.annotations.param; import com.cy.mybatis.beans.userbean; public interface usermapper {/*** add* @param pengguna* @retrows* user) throws Exception;/*** Use * @param user* @param id* @return* @throws Exception*/public int updateUser (@Param("u")UserBean user,@Param("id")int id) throws Exception;/*** Exception* @param id* @return* @throws Exception*/public int deleteUser(int id) throws Exception;/*** Query user information based on id* @param id* @return* @throws Exception*/Userbean publik selectUserById (int id) melempar pengecualian;/*** kueri semua informasi pengguna* @return* @throws Exception*/Daftar Publik <userbean> selectAllUser () Lempar Pengecualian;/*** Batch Add* @param user* @return* @throws Exception*/Public Int Int BatchinserTer Pengecualian;/*** Batch Delete* @param List* @return* @throws Exception*/Public int batchDeleteUser (@param ("Daftar") Daftar <Integer> Daftar) Lempar Pengecualian;/*** Data kueri paging* @param* @return* @throws Exception*/Daftar Publik <u userbean> paluer pauser* paru; @param parma* @return* @throws Exception*/public int countuser (peta <string, objek> parmas) melempar pengecualian;} file xml <? xml version = "." encoding = "utf-"?> <! Doctype mapper public "-// mybatis.org/dtd mapper." "http://mybatis.org/dtd/mybatis-mapper.dtd"><mapper namespace =" com.cy.mybatis.mapper.usermapper "> <!-set hasil kustom-> <resultMap =" USERMAP "type =" Userbean "> <" id identitas = "Id" ID "" ID "" ID "" ID "" ID "> <" ID "ID" ID "ID" ID "ID" ID "ID" ID "ID" ID "ID" ID "ID" ID "ID" ID "ID" ID "ID" ID "ID" javatype = "java.lang.Integer"> </d> <properti hasil = "nama pengguna" kolom = "nama pengguna" javatype = "java.lang.string"> </hasilnya> <hasil properti = "kata sandi" kolom = "kata sandi" javatype = "java.lang.string"> </hasilnya> </hasilnya = "JAVATYPE =" JAVA. " javatype = "java.lang.double"> </hasilnya> </resultMap> <!- Atribut ID dalam berbagai tag harus sama dengan nama metode di antarmuka, dan nilai atribut ID harus unik dan tidak dapat digunakan kembali. Properti ParameterType menentukan jenis parameter yang digunakan saat kueri, dan properti Hasil Tipe menentukan tipe set hasil yang dikembalikan oleh kueri-> <!-UsegeneratedKeys: (Ini hanya berguna untuk dimasukkan) Ini memberi tahu MyBatis untuk menggunakan Data dan Metode Get-Increys dari MyBat. Sqlserver). Nilai default: Salah. -> <!-KeyProperty: (hanya berguna untuk dimasukkan) Tandai properti. Mybatis akan menetapkan nilainya melalui getGeneratedKeys atau melalui elemen anak terpilih dari pernyataan insert. Default: Tidak diatur. -> <!-#{} konten adalah placeholder. Ketika parameternya adalah Javabean, ini menunjukkan nilai properti dari objek kacang yang ditempatkan-> <insert id = "insertUser" useGeneratedKeys = "true" keyproperty = "user.id"> Sisipkan ke t_user (username, kata sandi, akun) (#{uber.userName},#{User.password {User.password) (#, {{{{{{{{{{{{{{{{{{{{{{{{{User.pass. id="updateUser">update t_user set username=#{u.username},password=#{u.password},account=#{u.account} where id=#{id}</update><delete id="deleteUser" parameterType="int">delete from t_user where id=#{id} </delete><select id="selectUserById" parameterType = "int" resultMap = "usermap"> pilih * dari t_user where id =#{id} </select> <pilih id = "selectAllUser" resultMap = "userMap"> pilih * dari t_user </select> <!-batch operasi dan tag foreach-<masukkan id iD = "BatchInser" paramerTe. values <foreach collection="users" item="users" separator=",">(null,#{users.username},#{users.password},#{users.account})</foreach></insert><delete id="batchDeleteUser">delete from t_user where id in (<foreach collection="list" item="list" EPARATOR = ",">#{id} </freeach>) </delete> <!-Collection adalah elemen yang digunakan untuk traversal (diperlukan), pendukung array, daftar, set-> <!-Item mewakili alias ketika setiap elemen dalam set diulang. -> <!-Pemisah mewakili simbol apa yang digunakan sebagai pemisah antara setiap iterasi. -> <pilih id = "pagerUser" parameTerType = "java.util.map" resultMap = "userMap"> pilih * dari t_user di mana = <if test = "username! = null"> dan nama pengguna seperti $ {uSerName} </if> batasi {indeks {indeks {indeks, {indeks, {indeks {indeks, $ everus, {ever. ParameterType = "java.util.map" resultType = "int"> pilih count (*) dari t_user di mana = <if test = "username! = null"> dan nama pengguna seperti '%$ {username}%' </if> </silsilah </mapper> #when menghasilkan sql, kutipan akan ditugaskan untuk rakitan. $ Saat menghasilkan SQL, kutipan tidak akan dikumpulkan. Ini dapat digunakan untuk kelas uji perakitan parameter seperti pesanan oleh paket com.cy.mybatis.service; impor java.util.arraylist; impor java.util.hashmap; impor org.apache.util.session. com.cy.mybatis.tools.dbtools; import com.cy.mybatis.mapper.usermapper; kelas publik Userservice {/*** @param args*/public static void main (string [] args) {// insertUser (); // deleteuser (); // updateUser (); // serteUser (); // deleteUser (); // updateUser (); BatchInserTuser (); // BatchDeleteUser (); // countuser (); pageruser ();} private static void countuser () {sqlSession session = dbtools.getSession (); paramer mapper = Sesi. HashMap <String, Object> (); params.put ("username", "kitty"); int index =; params.put ("index", index); // dari halaman mana yang akan dimulai. mysql starts with params.put("pageSize", );//The number of data strips displayed per page int county;try {count = mapper.countUser(params);System.out.println(count);} catch (Exception e) {e.printStackTrace();}}private static void pagerUser() {SqlSession session = Dbtools.getSession (); usermapper mapper = session.getMapper (usermapper.class); peta <string, objek> params = hashmap baru <string, objek> (); params.put ("nama pengguna", "kitty"); params.put ("index",); // dari halaman mana. MySQL dimulai dengan params.put ("pagesize",); // Jumlah strip data yang ditampilkan per halaman coba {List <UserBean> u = mapper.pageruser (params); untuk (userbean userbean: u) {System.out.println ("----------"+userbean);}} catch (Exception e) {e.printstacktrace ();}} private static void batchDeleteUser () {sqlsession sesi = dbtoolsession (); USermapper () {sqlsession sesi = dbtool.getsession (); USERMPER (); session.getMapper (usermapper.class); Daftar <Integer> ids = ArrayList baru <Integer> (); for (int i =; i <; i ++) {ids.add (i);} coba {mapper.batchdeleteUser (ids); session.commit ();} catch (Exception e) {); Sesion. BatchInSertUser () {SQLSession session = dBtools.getSession (); Usermapper mapper = session.getMapper (usermapper.class); Daftar <UserBean> Pengguna = new ArrayList <UserBean> (); untuk (int i = i <; i ++) {UserBean UserBean = new UserBean ("("; {mapper.batchinserTuser (pengguna); session.Commit ();} catch (exception e) {e.printstacktrace ();}}/*** pengguna baru*/private static void insertUser () {sqlSession session = dbtools.getSesion (); userMapper mesring. "",.); coba {mapper.inserTuser (user); System.out.println (user.toString ()); session.commit ();} catch (pengecualian e) {e.printstacktrace (); session.rollback ();}}/*** hapus pengguna*/private static delete delete ();}}/*** Pengguna hapus static void void private static delete (); session = dBtools.getSession (); usermapper mapper = session.getMapper (usermapper.class); coba {mapper.deleteUser (); session.commit ();} catch (Exception e) {e.printStackTrace (); session.rollback ();}}/*** Data pengguna Modifikasi* session = dBtools.getSession (); usermapper mapper = session.getMapper (usermapper.class); userbean user = Userbean baru ("xiao ming", "" ,.); coba {mapper.updateuser (User,); session.commit ();} catch (exception e) {e.printscrace () () () (); oleh ID*/private static void selectUserById () {SQLSession session = dBtools.getSession (); usermapper mapper = session.getMapper (usermapper.class); coba {userbean user = mapper.selectuserbyid (); System.out.println (userbean.tostring (); {E.PrintStackTrace (); session.rollback ();}}/*** Permintaan Semua pengguna*/private static void selectAllUser () {sqlSession session = dbtools.getSession (); userMapper mapper = getmapper (usermapper.class); coba {list <userbean> user = mapper.selectAllUser (); System.out.println (user.toString ()); session.Commit ();} catch (Exception e) {e.printstacktrace (); session.rollback ();}}} Lihatlah keseluruhan proyek:
Semuanya perlu bertahan!