Selanjutnya, artikel sebelumnya "Pengembangan Proyek Mal Praktis Javaweb (II)" terutama mengimplementasikan General BasedAo.java dan menggunakan hasil Hasil untuk memetakan objek terkait.
1. Jenderal berbasisnya.java
Karena semua orang perlu menggunakannya, obat generik digunakan. Masalah yang perlu diperhatikan adalah bahwa kode seperti user.getClass (). GetName () perlu dimodifikasi. Metode modifikasi adalah melewatkannya dengan kelas parameter TC, dan kemudian gunakan tc.getName ().
Kode Lengkap:
Paket com.dao; import com.model.pager; import com.util.sessionutil; import com.util.systemContext; impor org.apache.atis.session.sqlsession; import java.util.hashmap; Impor Java.util.list; impor java.util.hashmap; */kelas publik berdasarkan <t> {/** * Ambil tipe T berdasarkan ID * @param ID untuk menghapus ID tipe T * @return */public t load (kelas <t> tc, int id) {sqlSession session = sessionutil.getSession (); T t = null; coba {t = session.selecTone (tc.getName ()+". Load", id); } akhirnya {sessionutil.closesession (session); } return t; } / *** Tambahkan tipe t* @param t t tipe yang akan ditambahkan* @return benar berhasil* / public boolean add (t t) {int isAdd = 0; SQLSession session = sessionutil.getSession (); coba {isAdd = session.insert (t.getClass (). getName ()+". Tambahkan", t); session.commit (); // commit} catch (pengecualian e) {session.rollback (); // rolle kembali jika pengiriman gagal} akhirnya {sessionutil.closesession (session); } return isAdd> 0; } / *** Hapus tipe t berdasarkan id* @param id untuk menghapus id t* @return benar berhasil* / public boolean delete (class <t> t, int id) {int isDelete = 0; SQLSession session = sessionutil.getSession (); coba {isDelete = session.delete (t.getName ()+". hapus", id); session.commit (); } catch (Exception e) {session.rollback (); // gagal kembali System.out.println ("Delete Failure"); e.printstacktrace (); } akhirnya {sessionutil.closesession (session); } return isDelete> 0; } / *** Perbarui t type* @param t pengguna untuk diperbarui* @return true berhasil* / pembaruan public boolean (t t) {int isUpdate = 0; SQLSession session = sessionutil.getSession (); coba {isUpdate = session.delete (t.getClass (). getName ()+". update", t); session.commit (); } catch (Exception e) {session.rollback (); // gagal pengembalian System.out.println ("Pembaruan gagal"); e.printstacktrace (); } akhirnya {sessionutil.closesession (session); } return iSupdate> 0; }/*** Paging kueri berdasarkan kondisi yang ditentukan* @param Maps Tentukan Koleksi Kondisi* @return*/Publ Pager <T> Temukan (kelas <T> T, peta <String, Object> peta) {int pagestArt = SystemContext.getPagestArt (); // halaman start int pagezeize = SystemContext.getpageSeze ();/page page start int pagezeze = SystemContext.getpageSize (); peta.put ("pagestart", pagestart); peta.put ("halaman", halaman); SQLSession session = sessionutil.getSession (); Daftar <T> data = null; coba {datasas = session.selectList (t.getName ()+". find", peta); // Dapatkan rekaman pagers.setDatas (data); pagers.setPagesze (halaman); pagers.setpagestart (pagestart); int totalRecord = session.selectone (t.getName ()+". findCount", peta); // Dapatkan jumlah total catatan pagers.setTotalRecord (TotalRecord); pagers.setPageIndex (pagestart/pagesze+1); } akhirnya {sessionutil.closesession (session); } return pagers; } / *** Ambil bagian dari data sesuai dengan kondisi yang ditentukan* @param Maps Tentukan set kondisi* @return* / Publ Pager <T> Daftar (kelas <T> t, peta <string, objek> peta) {pager <t> halaman = pager baru <> (); SQLSession session = sessionutil.getSession (); Daftar <T> data = null; coba {dataas = session.selectList (t.getName ()+". Daftar", peta); // Dapatkan rekaman pagers.setDatas (data); pagers.setTotalRecord (datas.size ()); } akhirnya {sessionutil.closesession (session); } return pagers; }}Userdao.java yang sama juga membutuhkan modifikasi yang sesuai
Public Class Userdao meluas berdasarkan <user> { / ** * Hapus pengguna berdasarkan ID ID * @param untuk menghapus ID pengguna * @return * / Public User Load (int ID) {return super.load (user.class, id); }/* Fungsi lain tidak diposting satu per satu, semuanya ditulis dengan cara yang sama*/}2. Pemetaan Hasil
Sederhananya, ketika informasi bidang dalam database tidak konsisten dengan atribut objek, perlu untuk memetakan melalui HasilMap.
Misalnya: ada kelas entitas pengguna di properti alamat, sebagai berikut
alamat kelas publik {private int id; nama string pribadi; telepon string pribadi; kode pos string pribadi; // sial objek pengguna secara langsung, bukan pengguna pengguna privat user_id; `` `` `` `` ``}Kemudian kami ingin mengambil alamat dan juga mengambil pengguna yang sesuai. Namun, ini adalah dua objek, dan keduanya memiliki atribut ID, jadi mybatis akan bingung ketika memanggil metode yang ditetapkan untuk mengatur properti. Tujuan dari menggunakan RACKMAP adalah untuk menghilangkan kekacauan ini.
Tulis LOAD SQL
<!-Muat alamat-> <!-Koneksi tabel diperlukan di sini, dan pengguna dikeluarkan. Koneksi juga diperlukan untuk memastikan bahwa alamat yang diambil tidak kosong, dan alias ID atribut duplikat-> <pilih id = "muat" parameTerType = "int" resultMap = "addressmap"> pilih *, t1.id sebagai 'a_id' dari alamat t1 bergabung dengan pengguna t2 t2 (t1.user_id = t2.id) di mana t1 T1 bergabung dengan pengguna t2 on (t1.user_id = t2.id) di mana t1 T1 gabung tepat pengguna t2 on (t1.user_id = T2.id) di mana t1 </pilih>
Di sini kami menggunakan HasilMap untuk memetakan, nama Hasil ini adalah alamat alamat.
ALAMATMAP
<resultMap id = "addressmap" type = "address" Automapping = "true"> <!-Memetakan A_ID dalam hasil sebagai id, dan Automapping lain = true akan secara otomatis cocok-> <id kolom = "a_id" properti = "id"/> <!-mengambil properti yang terkait-> <asosiasi properti = "User" iD "User"> <! properti = "id"/> <colom hasil = "nama pengguna" properti = "nama pengguna"/> <colom hasil = "nama panggilan"/> <hasil kolom = "nama panggilan"/> <colom hasil = "nama panggilan"/> <hasil kolom = "type" properti = "type"/> </association> </hasilnya>
Setelah konfigurasi di atas selesai, saat mencari, MyBatis akan secara otomatis memanggil metode set yang sesuai dan mengatur atribut ke kelas entitas.
tes
paket com.dao; impor com.model.address; alamat kelas publik Alamat Alamat = Alamatdao.Load (1); System.out.println (address.toString ()); } / *** Muat alamat* @param ID ID alamat yang akan dimuat* @return mengembalikan alamat yang akan dimuat, dan null gagal memuat* / muatan alamat publik (int id) {return super.load (address.class, id); }} Seperti yang dapat dilihat dalam rendering, selama atribut pemetaan diambil, semua yang tidak dipetakan adalah nol.
Ikuti ide ini untuk menyelesaikan fungsi lain
Kode XML:
<? Xml Version = "1.0" encoding = "UTF-8"?> <! Doctype mapper public "-// mybatis.org//dtd mapper 3.0 // en" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper naPape = "comy." Database tidak konsisten dengan atribut objek, Anda perlu memetakannya melalui resultMap-> <resultMap id = "addressmap" type = "address" Automapping = "true"> <!-peta a_id dalam hasil sebagai id, automapping = true akan secara otomatis cocok-> <id kolom = "a_id" properti "id" id "<! > <!-peta user_id ke ID pengguna-> <id kolom = "user_id" properti = "id"/> <column hasil = "nama pengguna" properti = "nama pengguna"/> <hasil kolom = "julukan" properti = "julukan"/> <Tabel Hasil = "NOCKNAME"/> <hasil Kolom = "Tipe" Properti "Properti =" Tipe "/</</</nickName> </</</<hasil kolom =" type "properti =" type "/</</</nickname> </quadshy <hasil column =" type "properti =" type "//</</nickname> </quadser <! Di sini, dan pengguna dikeluarkan. Koneksi memastikan bahwa alamat yang diambil tidak kosong, dan aliasing untuk duplikat Atribut ID -> <pilih id = "muat" parameterType = "int" resultMap = "addressmap"> pilih *, t1.id sebagai 'a_id' dari alamat t1 gabung tepat pengguna t2 on (t1.user_id = t2.id) di mana t1 t1 bergabung dengan pengguna t2 on (t1.user_id = T2.id) di mana t1 </select> <!--Add an address --> <insert id="add" parameterType="Address"> insert into address values (null,#{name},#{phone},#{postcode},${user_id}) </insert> <!--Delete an address--> <delete id="delete" parameterType="int"> DELETE FROM address WHERE id=#{id} </delete> <!-Modifikasi alamat-> <update id = "update" parameTerType = "address"> UPDATE ALAMAT SET NAME =#{name}, phone =#{phone}, postcode =#{postcode} di mana id =#{id} </update> <! Sebagai 'a_id' dari alamat t1 kanan bergabung dengan pengguna t2 on (t1.user_id = t2.id) di mana t1.user_id =#{user_id} </ pilih> </mapper>Kode Java:
Paket com.dao; import com.model.address; import com.model.pager; import java.util.hashmap; import java.util.map;/*** dibuat oleh NL101 pada 2016/2/23. */Public Class AddressDao meluas berdasarkan <spulht> {public static void main (string [] args) {addressdao addressdao = new addressdao (); Pager <dresser> pagers = addressdao.list (1); System.out.println (pagers.getDatas (). Size ()); } / ** * Muat alamat * @param ID ID alamat yang akan dimuat * @return mengembalikan alamat yang akan dimuat, dan NULL gagal * / muatan alamat publik (int id) {return super.load (address.class, id); } / *** Tambahkan alamat* @param alamat alamat yang akan ditambahkan* @param user_id the user_id sesuai dengan alamat yang akan ditambahkan* @return benar berhasil* / alamat boolean publik (alamat alamat, int user_id) {userdao userdao = new userdao (); if (userdao.load (user_id) == null) {return false; } return super.add (alamat); } / *** Hapus alamat* @param ID untuk menghapus ID yang sesuai dengan alamat* @return benar Hapus berhasil* / public boolean delete (int id) {return super.delete (address.class, id); } / *** Perbarui Alamat* @Param Alamat Alamat yang akan diperbarui* @return True Update berhasil* / Pembaruan Boolean Publik (Alamat Alamat) {return super.update (alamat); } / *** Perbarui Alamat* @Param Alamat Alamat yang akan diperbarui* @return True Update berhasil* / Pembaruan Boolean Publik (Alamat Alamat) {return super.update (alamat); } / ** * Ambil semua alamat pengguna berdasarkan ID pengguna * @param user_id * @return * / publ pager <spulht> daftar (int user_id) {peta <string, objek> peta = hashmap baru <> (); maps.put ("user_id", user_id); return super.list (address.class, peta); }}Jika lapisan ADO ditulis dengan cara ini, tidak akan ada masalah.
Di atas adalah semua tentang artikel ini. Ini semua tentang pengembangan seluruh proyek mal Javaweb. Saya harap ini akan membantu pembelajaran Anda.