1. Pemetaan Kombinasi
Kombinasi adalah kasus khusus hubungan asosiasi dan hubungan dengan tingkat kopling tertinggi. Objek utama dan sub-objek kombinasi memiliki siklus hidup yang sama. Jika objek utama mati, sub-objek juga akan mati. Di sini kami menggunakan pengusaha dan pengguna sebagai contoh. Baik pengguna dan pengusaha memiliki atribut informasi kontak. Jika Anda berpikir dari perspektif suatu objek, Anda akan sering menggambar model objek ke dalam metode kombinasi untuk mengabstraksi kelas informasi kontak yang umum. Kemudian kedua orang itu memasukkan objek informasi kontak yang sesuai. Saat menghadapi model objek yang sesuai, contoh objeknya ditunjukkan pada gambar di bawah ini:
Setelah model objek gabungan menghasilkan model hubungan yang sesuai, subkelas yang sesuai akan dimasukkan dalam tabel utama, sehingga struktur tabel yang sesuai akan menghasilkan atribut yang sesuai ke dalam tabel yang sesuai. Struktur tabel yang sesuai adalah sebagai berikut:
1.1 Kelas karyawan dan file pemetaan
Dalam model objek, ada hubungan inklusi antara karyawan dan kontak. Saat menulis kode, Anda perlu memasukkan objek kontak dalam karyawan. File pemetaan yang sesuai juga perlu memiliki pemetaan objek kontak. Tag <component> perlu digunakan untuk menunjukkan objek gabungan dan menambahkan properti objek ke tag objek.
Daftar: karyawan.java. Selain properti dasar, file kelas juga perlu dikemas dengan objek kontak karena ada lapisan hubungan inklusi di antara mereka.
paket com.src.hibernate; Karyawan Kelas Publik {// Nomor ID Private Int ID; publik int getId () {return id; } public void setid (int id) {this.id = id; } // Nama nama string pribadi; public string getName () {return name; } public void setName (name string) {this.name = name; } // Hubungi Object Private Hubungi UserContact; kontak publik getUserContact () {return userContact; } public void setUserContact (hubungi userContact) {this.usercontact = userContact; }}Listing 2: karyawan.hbm.xml, tambahkan file pemetaan yang sesuai. Objek kombinasi yang dipetakan harus ditandai dengan <component>, dan tambahkan atribut objek yang sesuai ke tag. Kode spesifiknya adalah sebagai berikut:
<? XML Versi = "1.0"?> <! Doctype hibernate-mapping public "-// hibernate/hibernate pemetaan dtd 3.0 // en" "http://hibernate.sourceForge.net/hibernate-papping-3.0.dtd"> <hibernate-papping> <"cooming." table="t_employee"> <id name="id"> <generator/> </id> <property name="name"/> <component name="employeeContact"> <property name="email"/> <property name="address"/> <property name="zipCode"/> <property name="contactTel"/> </component> </class> </hibernate-mapping>
1.2 Kelas Pengguna dan File Konfigurasi
Listing 3: user.java, struktur kontennya sama dengan karyawan.java. Saya tidak akan banyak bicara tentang yang lain, lihat kodenya:
paket com.src.hibernate; Pengguna kelas publik {// ID Nomor Private Int ID; publik int getId () {return id; } public void setid (int id) {this.id = id; } // Nama nama string pribadi; public string getName () {return name; } public void setName (name string) {this.name = name; } // Hubungi Object Private Hubungi UserContact; kontak publik getUserContact () {return userContact; } public void setUserContact (hubungi userContact) {this.usercontact = userContact; }}Listing 4: user.hbm.xml, struktur kontennya sama dengan karyawan.hbm.xml, dan terutama digunakan untuk penggunaan tag <component>. Ini sangat sederhana, dan kodenya adalah sebagai berikut:
<? XML Versi = "1.0"?> <! Doctype Hibernate-Mapping Public "-// Hibernate/Hibernate Mapping Dtd 3.0 // en" "http://hibernate.sourceForge.net/hibernate-papping-3.0.dtd"> <hibernate-mapping> <class name = "coomer. <id name="id"> <generator/generator/> </id> <property name="name"/> <component name="userContact"> <property name="email"/> <property name="address"/> <property name="zipCode"/> <property name="contactTel"/> </component> </class> </hibernate-mapping>
1.3 Contact.java Kelas
Tidak ada yang perlu diperhatikan dalam file kelas ini. Anda dapat menambahkan properti dasar dan Anda tidak perlu mengonfigurasi pemetaan yang sesuai untuk kelas ini, sehingga kontennya cukup sederhana.
paket com.src.hibernate; Kontak kelas publik {// Alamat email Private String Email; getemail string publik () {return email; } public void seteMail (string email) {this.email = email; } // alamat alamat string pribadi; public string getAddress () {alamat kembali; } public void setAddress (Alamat String) {this.address = alamat; } // Posting Kode Private String ZipCode; Public String getZipCode () {return zipcode; } public void setZipCode (string zipcode) {this.zipCode = zipcode; } // Kontak Nomor Private String ContactTel; string publik getContactTel () {return contactTel; } public void setContacttel (String contactTel) {this.contacttel = contacttel; }} 1.4 menghasilkan hasil
Setelah konfigurasi file di atas, struktur tabel basis data yang sesuai dapat dihasilkan. Pernyataan SQL yang dihasilkan adalah sebagai berikut:
drop table if exists t_employee drop table if exists t_user create table t_employee (id integer not null auto_increment, name varchar(255), email varchar(255), address varchar(255), zipCode varchar(255), contactTel varchar(255), primary key (id)) create table t_user (id integer not null auto_increment, name Varchar (255), email varchar (255), alamat varchar (255), zipcode varchar (255), contacttel varchar (255), kunci primer (id))
Struktur tabel basis data yang dihasilkan adalah sebagai berikut:
2. Operasi Data
Struktur tabel yang diperoleh dengan menggabungkan pemetaan adalah tabel lengkap, sehingga metode yang paling asli dapat diimplementasikan saat menulis dan membaca data. Di sini kami juga menggunakan metode pengujian yang digunakan dalam artikel sebelumnya untuk menulis dan membaca data, yang merupakan penggunaan metode simpan dan pemuatan, lihat di bawah untuk operasi tertentu.
2.1 Masukkan data
Di sini, pengguna digunakan sebagai contoh, dan operasi penulisan karyawan sama dengan pengguna. Saat menulis data, dua objek perlu dibuat, satu adalah objek kontak dan yang lainnya adalah objek pengguna. Saat menabung, hanya objek pengguna yang perlu disimpan, dan objek kontak yang sesuai akan disimpan bersama.
public void testSave1 () {// mendeklarasikan sesi sesi sesi sesi = null; coba {// dapatkan sesi sesi sesi = hibernateutils.getSession (); // buka sesi sesi.begintransaction (); // Buat Objek Koneksi Kontak UserContact = Kontak baru (); usercontact.setAddress ("Beijing"); usercontact.setContacttel ("1243435"); usercontact.setemail ("[email protected]"); usercontact.setzipcode ("zipcode"); // Buat pengguna objek pengguna pengguna = pengguna baru (); user.setname ("Zhangsan"); user.setUserContact (userContact); session.save (pengguna); // kirim sesi sesi.getTransaction (). Commit (); } catch (Exception e) {E.PrintStackTrace (); session.getTransaction (). rollback (); } akhirnya {hibernateutils.closesession (sesi); }} Pernyataan SQL yang dihasilkan:
Sisipkan ke T_USER (Nama, Email, Alamat, ZipCode, ContactTel) Nilai (?,?,?,?,?)
Periksa struktur tabel sebagai berikut:
2.2 BACA OPERASI
Juga menggunakan pengguna sebagai contoh, operasi karyawan sama dengan objek pengguna. Operasi membaca cukup sederhana, kodenya adalah sebagai berikut:
public void testLoad1 () {// mendeklarasikan sesi sesi sesi sesi = null; coba {// dapatkan sesi sesi sesi = hibernateutils.getSession (); // buka sesi sesi.begintransaction (); // Dapatkan pengguna objek pengguna pengguna = (user) session.load (user.class, 1); System.out.println ("Nama Pengguna:"+user.getName ()); // Kirim sesi sesi.getTransaction (). Commit (); } catch (Exception e) {E.PrintStackTrace (); session.getTransaction (). rollback (); } akhirnya {hibernateutils.closesession (sesi); }}Hasil yang sesuai dihasilkan sebagai berikut:
Hibernate: Pilih user0_.id as ID0_0_, user0_.name as Name0_0_, user0_.email as email0_0_, user0_.address sebagai alamat0_0_, user0_.zipcode sebagai zipcode0_0_, user0_.contactel sebagai contacttel0_ dari t dari t dari t dari t dari t dari t dari therer0_.contactel? Nama Pengguna: Zhangsan
AKU AKU AKU. Contoh komprehensif
Akun:
Akun kelas publik mengimplementasikan serializable {private int id; uang ganda pribadi; alamat alamat pribadi; publik int getId () {return id; } public void setid (int id) {this.id = id; } public double getMoney () {return money; } public void setMoney (uang ganda) {this.money = money; } alamat publik getAddress () {alamat kembali; } public void setAddress (alamat alamat) {this.address = alamat; }} Alamat:
alamat kelas publik mengimplementasikan serial {private string code; Private String City; provinsi string pribadi; Public String getCode () {return code; } public void setCode (kode string) {this.code = kode; } public string getCity () {return city; } public void setCity (string city) {this.city = city; } public string getProvince () {return province; } public void setProvince (String Province) {this.province = province; }} Account.hbm.xml:
<? Xml Version = "1.0" Encoding = "UTF-8"?> <! Doctype Hibernate-Mapping Public "-// Hibernate/Hibernate Mapping DTD 3.0 // EN" "http://hibernate.sourceForge.net/hibernate-mapping- 3.0.dtd"> <! Tools-> <Hibernate-Mapping Package = "pojo"> <class name = "Account" Table = "t_account"> <id name = "id"> <column name = "id"> </column> <generator> </en generator> </dr Property = "Money"> <Kolom = "uang"> </kolom> </do property = "name ="> <"KOPOM"> </COLMOMN> </Property name = "<pide =" <"KOPOME"> </COLMOLT </COLMOMAN> </Property Name = "<" KOMOLT = "> </COMPOMICE </COLMOM> </property name =" <pide = "<" KOPOLT "> </COLMOLT </COLMOMAN> </Property Name =" name = "code"> </olumner> </property> <properti name = "city"> <column name = "city"> </cumner> </property> <properti name = "province"> <column name = "province"> </colum