1. การทำแผนที่แบบผสมผสาน
การรวมกันเป็นกรณีพิเศษของความสัมพันธ์ของสมาคมและความสัมพันธ์กับการมีเพศสัมพันธ์ระดับสูงสุด วัตถุหลักและวัตถุย่อยของการรวมกันมีวงจรชีวิตเท่ากัน หากวัตถุหลักเสียชีวิตวัตถุย่อยจะตายเช่นกัน ที่นี่เราใช้นายจ้างและผู้ใช้เป็นตัวอย่าง ทั้งผู้ใช้และนายจ้างมีคุณลักษณะข้อมูลติดต่อ หากคุณคิดจากมุมมองของวัตถุคุณมักจะวาดโมเดลวัตถุเป็นวิธีการรวมกันเพื่อสรุปคลาสข้อมูลการติดต่อทั่วไป จากนั้นทั้งสองคนรวมวัตถุข้อมูลติดต่อที่สอดคล้องกัน เมื่อหันหน้าไปทางโมเดลวัตถุที่เกี่ยวข้องตัวอย่างวัตถุจะแสดงในรูปด้านล่าง:
หลังจากโมเดลวัตถุรวมสร้างโมเดลความสัมพันธ์ที่สอดคล้องกัน subclass ที่สอดคล้องกันจะรวมอยู่ในตารางหลักดังนั้นโครงสร้างตารางที่สอดคล้องกันจะสร้างแอตทริบิวต์ที่เกี่ยวข้องลงในตารางที่เกี่ยวข้อง โครงสร้างตารางที่สอดคล้องกันมีดังนี้:
1.1 คลาสพนักงานและไฟล์การแมป
ในโมเดลวัตถุมีความสัมพันธ์ระหว่างพนักงานและการติดต่อ เมื่อเขียนโค้ดคุณต้องรวมวัตถุติดต่อในพนักงาน ไฟล์การแมปที่เกี่ยวข้องยังจำเป็นต้องมีการแมปของวัตถุติดต่อ ต้องใช้แท็ก <Component> เพื่อระบุวัตถุรวมและเพิ่มคุณสมบัติของวัตถุลงในแท็กวัตถุ
รายชื่อ: Employee.java นอกเหนือจากคุณสมบัติพื้นฐานแล้วไฟล์คลาสยังต้องบรรจุด้วยวัตถุติดต่อเนื่องจากมีเลเยอร์ของความสัมพันธ์ระหว่างพวกเขา
แพ็คเกจ com.src.hibernate; พนักงานชั้นเรียนสาธารณะ {// หมายเลขรหัสส่วนตัว ID ID ส่วนตัว; สาธารณะ int getId () {return id; } โมฆะสาธารณะ setId (int id) {this.id = id; } // ชื่อชื่อสตริงส่วนตัว; สตริงสาธารณะ getName () {ชื่อคืน; } โมฆะสาธารณะ setName (ชื่อสตริง) {this.name = name; } // ติดต่อวัตถุส่วนตัวติดต่อ userContact; การติดต่อสาธารณะ getUserContact () {return userContact; } โมฆะสาธารณะ setUserContact (ติดต่อ userContact) {this.userContact = userContact; -รายการ 2: Employee.hbm.xml, เพิ่มไฟล์การแมปที่เกี่ยวข้อง วัตถุผสมที่แมปควรทำเครื่องหมายด้วย <ส่วนประกอบ> และเพิ่มแอตทริบิวต์วัตถุที่เกี่ยวข้องในแท็ก รหัสเฉพาะมีดังนี้:
<? xml version = "1.0"?> <! doctype hibernate-mapping สาธารณะ "-// hibernate/hibernate mapping dtd 3.0 // en" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" table = "t_employee"> <id name = "id"> <generator/> </id> <name property = "name"/> <component name = "EmployeeContact"> <property name = "email"/> <property name = "ที่อยู่"/> <property = "ZipCode"/> <
1.2 ไฟล์ผู้ใช้และไฟล์การกำหนดค่า
รายการ 3: user.java โครงสร้างเนื้อหาของมันเหมือนกับของ Employee.java ฉันจะไม่พูดมากเกี่ยวกับคนอื่น ๆ ดูรหัส:
แพ็คเกจ com.src.hibernate; ผู้ใช้ระดับสาธารณะ {// หมายเลขรหัส ID ID ส่วนตัว; สาธารณะ int getId () {return id; } โมฆะสาธารณะ setId (int id) {this.id = id; } // ชื่อชื่อสตริงส่วนตัว; สตริงสาธารณะ getName () {ชื่อคืน; } โมฆะสาธารณะ setName (ชื่อสตริง) {this.name = name; } // ติดต่อวัตถุส่วนตัวติดต่อ userContact; การติดต่อสาธารณะ getUserContact () {return userContact; } โมฆะสาธารณะ setUserContact (ติดต่อ userContact) {this.userContact = userContact; -รายการ 4: user.hbm.xml โครงสร้างเนื้อหาของมันเหมือนกับของ Employee.hbm.xml และส่วนใหญ่จะใช้สำหรับการใช้แท็ก <Component> มันง่ายมากและรหัสมีดังนี้:
<? xml เวอร์ชัน = "1.0"?> <! Doctype hibernate-mapping สาธารณะ "-// hibernate/hibernate mapping dtd 3.0 // en" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" table = "t_user"> <id name = "id"> <generator/generator/> </id> <property name = "name"/> <component name = "userContact"> <property name = "email"/> <property name = "address"/> <property name = "ZipCode"/> <
1.3 contact.java คลาส
ไม่มีอะไรให้ความสนใจในไฟล์คลาสนี้ คุณสามารถเพิ่มคุณสมบัติพื้นฐานและคุณไม่จำเป็นต้องกำหนดค่าการแมปที่สอดคล้องกันสำหรับคลาสนี้ดังนั้นเนื้อหาของมันค่อนข้างง่าย
แพ็คเกจ com.src.hibernate; ติดต่อคลาสสาธารณะ {// ที่อยู่อีเมลสตริงส่วนตัวอีเมล; สตริงสาธารณะ getEmail () {ส่งคืนอีเมล; } โมฆะสาธารณะ setEmail (อีเมลสตริง) {this.email = อีเมล; } // ที่อยู่สตริงส่วนตัว; สตริงสาธารณะ getAddress () {ที่อยู่ส่งคืน; } โมฆะสาธารณะ setAddress (ที่อยู่สตริง) {this.address = ที่อยู่; } // รหัสโพสต์รหัสส่วนตัว zipcode; สตริงสาธารณะ getZipCode () {return zipcode; } โมฆะสาธารณะ setZipCode (สตริง zipcode) {this.zipcode = zipCode; } // หมายเลขติดต่อสตริงส่วนตัวติดต่อติดต่อ; สตริงสาธารณะ getContactTel () {return contacttel; } โมฆะสาธารณะ setContActTel (สตริง contacttel) {this.contactTel = contacttel; - 1.4 สร้างผลลัพธ์
หลังจากการกำหนดค่าไฟล์ด้านบนสามารถสร้างโครงสร้างตารางฐานข้อมูลที่สอดคล้องกันได้ คำสั่ง SQL ที่สร้างขึ้นมีดังนี้:
ตารางดร็อปถ้ามีตารางการวาง t_employee ถ้ามี t_user สร้างตาราง t_employee (ID จำนวนเต็มไม่ใช่ null auto_increment, ชื่อ varchar (255), อีเมล varchar (255), ที่อยู่ varchar (255), zipcode varchar (255), contacttel varchar (255) Varchar (255), อีเมล Varchar (255), ที่อยู่ Varchar (255), ZipCode Varchar (255), Contacttel Varchar (255), คีย์หลัก (ID))
โครงสร้างตารางฐานข้อมูลที่สร้างขึ้นมีดังนี้:
2. การทำงานของข้อมูล
โครงสร้างตารางที่ได้จากการรวมการแมปเป็นตารางที่สมบูรณ์ดังนั้นวิธีดั้งเดิมที่สุดสามารถนำไปใช้ได้เมื่อเขียนและอ่านข้อมูล ที่นี่เรายังใช้วิธีการทดสอบที่ใช้ในบทความก่อนหน้านี้เพื่อเขียนและอ่านข้อมูลซึ่งเป็นการใช้วิธีการบันทึกและโหลดดูด้านล่างสำหรับการดำเนินการเฉพาะ
2.1 แทรกข้อมูล
ที่นี่ผู้ใช้ใช้เป็นตัวอย่างและการดำเนินการเขียนของพนักงานเหมือนกับผู้ใช้ เมื่อเขียนข้อมูลจำเป็นต้องสร้างวัตถุสองวัตถุหนึ่งชิ้นคือวัตถุที่ติดต่อและอีกวัตถุหนึ่งคือวัตถุผู้ใช้ เมื่อบันทึกจะต้องบันทึกวัตถุผู้ใช้เท่านั้นและวัตถุติดต่อที่เกี่ยวข้องจะถูกบันทึกไว้ด้วยกัน
โมฆะสาธารณะ testsave1 () {// ประกาศเซสชันวัตถุเซสชันเซสชัน = null; ลอง {// รับ Session Object Session = HiberNateUtils.getSession (); // เปิดเซสชันเซสชัน BEGINTRANSACTION (); // สร้างวัตถุการเชื่อมต่อติดต่อ userContact = ผู้ติดต่อใหม่ (); usercontact.setaddress ("ปักกิ่ง"); usercontact.setContactTel ("1243435"); usercontact.setemail ("[email protected]"); usercontact.setzipcode ("zipcode"); // สร้างผู้ใช้วัตถุผู้ใช้ผู้ใช้ = ผู้ใช้ใหม่ (); user.setName ("Zhangsan"); user.setUserContact (userContact); session.save (ผู้ใช้); // ส่งเซสชันเซสชัน getTransaction (). commit (); } catch (exception e) {e.printstacktrace (); session.getTransaction (). ย้อนกลับ (); } ในที่สุด {hibernateutils.closesession (เซสชัน); - คำสั่ง SQL ที่สร้างขึ้น:
แทรกลงใน t_user (ชื่อ, อีเมล, ที่อยู่, ZipCode, contacttel) ค่า (?,?,?,?,?)
ตรวจสอบโครงสร้างตารางดังนี้:
2.2 อ่านการดำเนินการ
นอกจากนี้ยังใช้ผู้ใช้เป็นตัวอย่างการดำเนินงานของพนักงานนั้นเหมือนกับวัตถุผู้ใช้ การดำเนินการอ่านค่อนข้างง่ายรหัสมีดังนี้:
โมฆะสาธารณะ testload1 () {// ประกาศเซสชันวัตถุเซสชันเซสชัน = null; ลอง {// รับ Session Object Session = HiberNateUtils.getSession (); // เปิดเซสชันเซสชัน BEGINTRANSACTION (); // รับผู้ใช้วัตถุผู้ใช้ผู้ใช้ = (ผู้ใช้) เซสชันการโหลด (user.class, 1); System.out.println ("ชื่อผู้ใช้:"+user.getName ()); // ส่งเซสชัน session.getTransaction (). commit (); } catch (exception e) {e.printstacktrace (); session.getTransaction (). ย้อนกลับ (); } ในที่สุด {hibernateutils.closesession (เซสชัน); -ผลลัพธ์ที่สอดคล้องกันถูกสร้างขึ้นดังนี้:
Hibernate: เลือก user0_.id เป็น id0_0_, user0_.name เป็น name0_0_, user0_.email เป็น email0_0_, user0_.address เป็นที่อยู่ 0_0_, user0_.zipcode เป็น zipcode0_0_, user0_.contacttel ชื่อผู้ใช้: จางซาน
iii. ตัวอย่างที่ครอบคลุม
บัญชี:
บัญชีชั้นเรียนสาธารณะใช้ serializable {ID ส่วนตัว เงินคู่ส่วนตัว ที่อยู่ส่วนตัว สาธารณะ int getId () {return id; } โมฆะสาธารณะ setId (int id) {this.id = id; } สาธารณะ double getMoney () {คืนเงิน; } โมฆะสาธารณะ setMoney (เงินสองเท่า) {this.money = เงิน; } ที่อยู่สาธารณะ getAddress () {return address; } โมฆะสาธารณะ setAddress (ที่อยู่ที่อยู่) {this.address = ที่อยู่; - ที่อยู่:
ที่อยู่คลาสสาธารณะใช้ serializable {รหัสสตริงส่วนตัว; เมืองสตริงส่วนตัว; จังหวัดสตริงส่วนตัว สตริงสาธารณะ getCode () {รหัสส่งคืน; } โมฆะสาธารณะ setCode (รหัสสตริง) {this.code = code; } Public String getCity () {Return City; } โมฆะสาธารณะ setCity (String City) {this.city = City; } Public String getProvince () {Return Province; } โมฆะสาธารณะ setProvince (จังหวัดสตริง) {this.province = จังหวัด; - Account.hbm.xml:
<? XML เวอร์ชัน = "1.0" การเข้ารหัส = "UTF-8"?> <! Doctype Hibernate-Mapping สาธารณะ "-// hibernate/hibernate mapping dtd 3.0 // en" "http://hibernate.sourceforge.net/hibernate-mapping-3 เครื่องมือ-> <hibernate-mapping package = "pojo"> <class name = "account" table = "t_account"> <id name = "id"> <column name = "id"> </column> name = "code"> </column> </property> <property name = "city"> <column name = "city"> </column> </property> <property name = "Province"> <column name = "Province"> </column>