การทำแผนที่แบบหลายต่อหนึ่ง
การเชื่อมโยงแบบหลายต่อหนึ่งเป็นความสัมพันธ์ที่พบบ่อยที่สุดซึ่งวัตถุสามารถเชื่อมโยงกับวัตถุหลายชิ้น ตัวอย่างเช่นวัตถุที่อยู่ที่เหมือนกันหนึ่งชิ้นอาจเชื่อมโยงกับวัตถุของพนักงานหลายคน
กำหนดตาราง RDBMS:
พิจารณาสถานการณ์ที่เราต้องการบันทึกพนักงานที่จะเก็บไว้ในตารางพนักงานซึ่งจะมีโครงสร้างดังต่อไปนี้:
สร้างพนักงานตาราง (ID int ไม่ใช่ null auto_increment, first_name varchar (20) ค่าเริ่มต้น null, last_name varchar (20) ค่าเริ่มต้น null, เงินเดือน int เริ่มต้น null, ที่อยู่ int ไม่ใช่ null, คีย์หลัก (id));
นอกจากนี้พนักงานหลายคนสามารถมีที่อยู่เดียวกันได้ดังนั้นสมาคมนี้สามารถนำเสนอได้โดยใช้การเชื่อมโยงแบบหนึ่งต่อหนึ่ง เราจัดเก็บข้อมูลที่เกี่ยวข้องกับที่อยู่ในตารางแยกต่างหากพร้อมโครงสร้างต่อไปนี้:
สร้างที่อยู่ตาราง (ID int ไม่ใช่ null auto_increment, Street_name Varchar (40) ค่าเริ่มต้น null, city_name varchar (40) ค่าเริ่มต้น null, state_name varchar (40) ค่าเริ่มต้น null, zipcode varchar (10) ค่าเริ่มต้น, คีย์หลัก (ID));
สร้างตาราง RBDMS ในเวลาเดียวกันและปล่อยให้พวกเขาเตรียมพร้อมสำหรับการใช้งานครั้งต่อไป
กำหนดคลาส Pojo:
ลองใช้พนักงานระดับ POJO ที่จะใช้เพื่อเก็บตัวแปรของวัตถุและประเภทที่อยู่กับตารางพนักงาน
นำเข้า java.util.*; พนักงานชั้นเรียนสาธารณะ {ID INT ส่วนตัว; สตริงส่วนตัวชื่อแรก; สตริงส่วนตัวนามสกุล; เงินเดือนส่วนตัว ที่อยู่ส่วนตัว พนักงานสาธารณะ () {} พนักงานสาธารณะ (สตริง fname, สตริง lname, เงินเดือน int, ที่อยู่) {this.firstName = fname; this.lastName = lName; this.salary = เงินเดือน; this.address = ที่อยู่; } สาธารณะ int getId () {return id; } โมฆะสาธารณะ setId (int id) {this.id = id; } สตริงสาธารณะ getFirstName () {return firstName; } โมฆะสาธารณะ setFirstName (สตริง first_name) {this.firstName = first_name; } สตริงสาธารณะ getLaStName () {return lastName; } โมฆะสาธารณะ setLastName (สตริง last_name) {this.lastName = last_name; } public int getalary () {คืนเงินเดือน; } โมฆะสาธารณะ setSalary (เงินเดือน int) {this.salary = เงินเดือน; } ที่อยู่สาธารณะ getAddress () {return address; } โมฆะสาธารณะ setAddress (ที่อยู่ที่อยู่) {this.address = ที่อยู่; -เราจำเป็นต้องกำหนดตารางที่อยู่ที่เกี่ยวข้องเพื่อให้วัตถุที่อยู่สามารถจัดเก็บและดึงคลาส POJO อื่นในตารางที่อยู่
นำเข้า Java.util.*; ที่อยู่ระดับสาธารณะ {ID INT ส่วนตัว; String Street ส่วนตัว; เมืองสตริงส่วนตัว; สถานะสตริงส่วนตัว zipcode สตริงส่วนตัว; ที่อยู่สาธารณะ () {} ที่อยู่สาธารณะ (String Street, String City, String State, String ZipCode) {this.street = Street; this.city = เมือง; this.state = state; this.zipcode = zipcode; } สาธารณะ int getId () {return id; } โมฆะสาธารณะ setId (int id) {this.id = id; } Public String getStreet () {return street; } โมฆะสาธารณะ setStreet (String Street) {this.street = Street; } Public String getCity () {Return City; } โมฆะสาธารณะ setCity (String City) {this.city = City; } สตริงสาธารณะ getState () {return state; } โมฆะสาธารณะ setState (สถานะสตริง) {this.state = state; } สตริงสาธารณะ getZipCode () {return zipcode; } โมฆะสาธารณะ setZipCode (สตริง zipcode) {this.zipcode = zipCode; - กำหนดไฟล์การแมปไฮเบอร์เนต:
พัฒนาไฟล์การแมปของเราที่แนะนำวิธีการจำศีลวิธีกำหนดคลาสแผนที่ไปยังตารางฐานข้อมูล องค์ประกอบการประมวลผล <หลายต่อหนึ่ง> จะถูกนำมาใช้เพื่อกำหนดกฎเพื่อสร้างความสัมพันธ์แบบหลายต่อหนึ่งระหว่างพนักงานและหน่วยงานที่อยู่
<? XML เวอร์ชัน = "1.0" การเข้ารหัส = "UTF-8"?> <! Doctype Hibernate-Mapping สาธารณะ "-// hibernate/hibernate mapping dtd // en" "http://www.hibernate.org/dtd/hibernate-mapping-3 table = "พนักงาน"> <meta attribute = "Class-Description"> คลาสนี้มีรายละเอียดของพนักงาน </meta> <id name = "id" type = "int" คอลัมน์ = "id"> <generator/> </id> <property name = "FirstName" คอลัมน์ = "First_name" type = "String"/> <property name = "LastName" Column = "Last_name" Type = "String"/> < not-null = "true"/> </class> <class name = "address" table = "address"> <meta attribute = "class-description"> คลาสนี้มีรายละเอียดที่อยู่ </meta> <id name = "id" type = "int" คอลัมน์ = "id"> <generator/> </id> <property name = "Street" คอลัมน์ = "street_name" type = "String"/> <property name = "city" column = "city_name" type = "string"/> type = "string"/> </class> </hibernate-mapping>
รูปแบบ <classname> .hbm.xml ในไฟล์การแมปที่ควรบันทึก บันทึก File Employee.hbm.xml ในไฟล์การแมป คุ้นเคยกับรายละเอียดการแมปส่วนใหญ่แล้ว แต่ลองดูองค์ประกอบทั้งหมดในไฟล์การแมปอีกครั้ง:
เอกสารที่แมปเป็นเอกสาร XML ที่มี <Hibernate-Mapping> เป็นองค์ประกอบรูทที่สอดคล้องกับแต่ละคลาสที่มีองค์ประกอบ 2 <class>
องค์ประกอบ <class> ใช้เพื่อกำหนดตารางฐานข้อมูลการแมปเฉพาะจากคลาส Java ชื่อคลาส Java ระบุแอตทริบิวต์ชื่อขององค์ประกอบคลาสและชื่อตารางแอตทริบิวต์ชื่อตารางระบุ
องค์ประกอบ <meta> เป็นองค์ประกอบเสริมที่สามารถใช้ในการสร้างคำอธิบายของคลาส
องค์ประกอบ <id> แมปแอตทริบิวต์ ID ที่ไม่ซ้ำกันในคลาสกับคีย์หลักของตารางฐานข้อมูล แอตทริบิวต์ชื่อขององค์ประกอบ ID หมายถึงคลาสของแอตทริบิวต์และแอตทริบิวต์คอลัมน์หมายถึงคอลัมน์ในตารางฐานข้อมูล แอตทริบิวต์ประเภทบันทึกประเภทการแมปไฮเบอร์เนตซึ่งจะถูกแปลงจาก Java เป็นประเภทข้อมูล SQL
ค่าคีย์หลักในองค์ประกอบ <senerator> ภายในองค์ประกอบ ID ใช้เพื่อสร้างโดยอัตโนมัติ ตั้งค่าแอตทริบิวต์คลาสขององค์ประกอบที่สร้างขึ้นเพื่อให้ไฮเบอร์เนตรับอัลกอริทึมว่าเป็นตัวตนลำดับหรือ HILO เพื่อสร้างคีย์หลักตามความสามารถในการสนับสนุนของฐานข้อมูลพื้นฐาน
องค์ประกอบ <porement> ใช้เพื่อแมปคุณสมบัติของคลาส Java ไปยังคอลัมน์ในตารางฐานข้อมูล แอตทริบิวต์ชื่อขององค์ประกอบหมายถึงคลาสของแอตทริบิวต์และแอตทริบิวต์คอลัมน์หมายถึงคอลัมน์ในตารางฐานข้อมูล แอตทริบิวต์ประเภทบันทึกประเภทการแมปไฮเบอร์เนตซึ่งจะถูกแปลงจาก Java เป็นประเภทข้อมูล SQL
องค์ประกอบการประมวลผล <หลายต่อหนึ่ง> ใช้เพื่อตั้งค่าความสัมพันธ์ระหว่างพนักงานและนิติบุคคลที่อยู่ แอตทริบิวต์ชื่อถูกตั้งค่าเป็นตัวแปรที่กำหนดไว้ในคลาสหลักในกรณีของเรามันคือที่อยู่ แอตทริบิวต์คอลัมน์ใช้สำหรับชื่อคอลัมน์ในชุดพนักงานตารางหลัก
ในที่สุดเราจะสร้างวิธีการหลัก () ของคลาสแอปพลิเคชันเพื่อเรียกใช้แอปพลิเคชัน เราจะใช้แอปพลิเคชันนี้เพื่อบันทึกพนักงานบางคนพร้อมกับที่อยู่ของพวกเขาเพื่อบันทึกที่อยู่ของพวกเขาจากนั้นเราจะสมัครสำหรับการดำเนินการ CRUD ในบันทึก
นำเข้า Java.util.*; นำเข้า org.hibernate.HibernateException; นำเข้า org.hibernate.session; นำเข้า org.hibernate.transaction; นำเข้า org.hibernate.sessionfactory; นำเข้า org.hibernate.cfg.configuration; การจัดการระดับสาธารณะ โมฆะคงที่สาธารณะหลัก (สตริง [] args) {ลอง {โรงงาน = การกำหนดค่าใหม่ (). configure (). buildSessionFactory (); } catch (throwable ex) {system.err.println ("ล้มเหลวในการสร้างวัตถุ SessionFactory" + ex); โยนข้อยกเว้นใหม่ IniniNitializerError (EX); } managemployee me = new Managemployee (); / * ให้เรามีหนึ่งวัตถุที่อยู่ */ ที่อยู่ = me.addaddress ("Kondapur", "Hyderabad", "AP", "532"); / * เพิ่มระเบียนพนักงานในฐานข้อมูล */ จำนวนเต็ม Empid1 = me.addemployee ("Manoj", "Kumar", 4000, ที่อยู่); / * เพิ่มระเบียนพนักงานอื่นในฐานข้อมูล */ จำนวนเต็ม Empid2 = Me.addemployee ("dilip", "Kumar", 3000, ที่อยู่); / * แสดงรายการพนักงานทั้งหมด */ me.listemployee (); / * อัปเดตบันทึกเงินเดือนของพนักงาน */ me.updateemployee (EMPID1, 5000); / * ลบพนักงานจากฐานข้อมูล */ me.deleteEmployee (EMPID2); / * แสดงรายการพนักงานทั้งหมด */ me.listemployees (); } / * วิธีการเพิ่มเร็กคอร์ดที่อยู่ในฐานข้อมูล * / ที่อยู่สาธารณะที่อยู่ที่อยู่ (String Street, String City, String State, String ZipCode) {เซสชันเซสชัน = Factory.OpenSession (); ธุรกรรม tx = null; Integer addressId = null; ที่อยู่ = null; ลอง {tx = session.beginTransaction (); ที่อยู่ = ที่อยู่ใหม่ (ถนน, เมือง, รัฐ, รหัสไปรษณีย์); addressId = (จำนวนเต็ม) เซสชัน Save (ที่อยู่); tx.commit (); } catch (hibernateException e) {ถ้า (tx! = null) tx.rollback (); E.PrintStackTrace (); } ในที่สุด {session.close (); } return address; } / * เมธอดเพื่อเพิ่มระเบียนพนักงานในฐานข้อมูล * / addemployee (String fname, String lname, เงินเดือน int, ที่อยู่) {เซสชันเซสชัน = factory.opensession (); ธุรกรรม tx = null; จำนวนเต็ม EmployeeId = null; ลอง {tx = session.beginTransaction (); พนักงานพนักงานพนักงาน = พนักงานใหม่ (fname, lname, เงินเดือน, ที่อยู่); EmployeeId = (จำนวนเต็ม) เซสชั่น SAVE (พนักงาน); tx.commit (); } catch (hibernateException e) {ถ้า (tx! = null) tx.rollback (); E.PrintStackTrace (); } ในที่สุด {session.close (); } return EmployeeId; } / * วิธีการแสดงรายละเอียดพนักงานทั้งหมด * / โมฆะสาธารณะ Listemployees () {เซสชันเซสชัน = factory.opensession (); ธุรกรรม tx = null; ลอง {tx = session.beginTransaction (); รายการพนักงาน = เซสชัน. createquery ("จากพนักงาน"). list (); สำหรับ (iterator iterator = พนักงาน. titerator (); iterator.hasnext ();) {พนักงานพนักงาน = (พนักงาน) iterator.next (); System.out.print ("ชื่อแรก:" + Employee.getFirstName ()); System.out.print ("นามสกุล:" + Employee.getLastName ()); System.out.println ("เงินเดือน:" + Employee.getSalary ()); address add = exployee.getAddress (); System.out.println ("ที่อยู่"); System.out.println ("Street:" + add.getStreet ()); System.out.println ("เมือง:" + add.getCity ()); System.out.println ("state:" + add.getState ()); System.out.println ("zipcode:" + add.getzipcode ()); } tx.Commit (); } catch (hibernateException e) {ถ้า (tx! = null) tx.rollback (); E.PrintStackTrace (); } ในที่สุด {session.close (); }} / * วิธีการอัปเดตเงินเดือนสำหรับพนักงาน * / โมฆะสาธารณะอัพเดต public updateMployee (จำนวนเต็ม EmployeeId, เงินเดือน int) {เซสชันเซสชัน = factory.opensession (); ธุรกรรม tx = null; ลอง {tx = session.beginTransaction (); พนักงานพนักงานพนักงาน = (พนักงาน) เซสชั่น get (Employee.class, EmployeeId); พนักงาน. Setsalary (เงินเดือน); session.update (พนักงาน); tx.commit (); } catch (hibernateException e) {ถ้า (tx! = null) tx.rollback (); E.PrintStackTrace (); } ในที่สุด {session.close (); }} / * วิธีการลบพนักงานออกจากบันทึก * / โมฆะสาธารณะ deleteemployee (จำนวนเต็ม EmployeeId) {เซสชันเซสชัน = factory.opensession (); ธุรกรรม tx = null; ลอง {tx = session.beginTransaction (); พนักงานพนักงานพนักงาน = (พนักงาน) เซสชั่น get (Employee.class, EmployeeId); session.delete (พนักงาน); tx.commit (); } catch (hibernateException e) {ถ้า (tx! = null) tx.rollback (); E.PrintStackTrace (); } ในที่สุด {session.close (); - รวบรวมและดำเนินการ:
นี่คือขั้นตอนในการรวบรวมและเรียกใช้แอปพลิเคชันด้านบน ตรวจสอบให้แน่ใจว่ามีการตั้งค่าเส้นทางและ classpath อย่างเหมาะสมก่อนที่จะรวบรวมและดำเนินการ
รับผลลัพธ์ต่อไปนี้บนหน้าจอและบันทึกถูกสร้างขึ้นทั้งในตารางพนักงานและที่อยู่
$ java managemployee
..... ข้อความบันทึกต่าง ๆ จะแสดงที่นี่ ......... ชื่อแรก: Manoj นามสกุล: Kumar เงินเดือน: 4000Address Street: Kondapur City: Hyderabad State: AP Zipcode: 532 ชื่อ: DILIP ชื่อ: Kumar เงินเดือน: 3000Address Street: Kondapur City: Hyderabad State: AP Zipcode: 532first ถนน: Kondapur City: Hyderabad State: AP Zipcode: 532
หากคุณตรวจสอบพนักงานและตารางที่อยู่คุณควรบันทึก:
mysql> เลือก * จากพนักงาน;
- -
mysql> เลือก * จากที่อยู่;
- -
การทำแผนที่แบบหนึ่งต่อหลายคน
การทำแผนที่แบบหนึ่งถึงหลายครั้งสามารถนำมาใช้โดยใช้ชุดของคอลเลกชัน Java ที่ไม่มีองค์ประกอบที่ซ้ำกันใด ๆ เราได้เห็นวิธีการตั้งค่าแผนที่ในไฮเบอร์เนตดังนั้นหากคุณได้เรียนรู้เกี่ยวกับการแมปชุดการตั้งค่าทั้งหมดสามารถใช้สำหรับการแมปแบบหนึ่งต่อหลายคน
ชุดถูกแมปกับองค์ประกอบ <et> ในตารางแผนที่และเริ่มต้นใน java.util.hashset คุณสามารถใช้คอลเลกชันชุดในชั้นเรียนโดยมีองค์ประกอบในคอลเลกชันที่ไม่ต้องการการทำซ้ำ
เรายังคงใช้ตาราง RDBMS และคลาส POJO ที่กำหนดไว้ในตัวอย่างข้างต้น
กำหนดไฟล์การแมปไฮเบอร์เนต:
มาแนะนำวิธีการกำหนดค่าไฮเบอร์เนตวิธีการกำหนดคลาสที่แมปกับไฟล์การแมปของตารางฐานข้อมูล
<? XML เวอร์ชัน = "1.0" การเข้ารหัส = "UTF-8"?> <! Doctype Hibernate-Mapping สาธารณะ "-// hibernate/hibernate mapping dtd // en" "http://www.hibernate.org/dtd/hibernate-mapping-3 table = "พนักงาน"> <meta attribute = "Class-Description"> คลาสนี้มีรายละเอียดของพนักงาน </meta> <id name = "id" type = "int" คอลัมน์ = "id"> <generator/> </id> <set name = "ใบรับรอง" cascade = "all"> <key column = "Employee_id"/> <one-to-merany/> </set> type = "string"/> <property name = "salary" คอลัมน์ = "เงินเดือน" type = "int"/> </class> <class name = "Certificate" Table = "Certificate"> <meta attribute = "Class-Description"> คลาสนี้มีระเบียนใบรับรอง </meta> <id name = "id" type = "int" คอลัมน์ = "id"> <generator/> </id> <property name = "name" คอลัมน์ = "certificate_name" type = "String"/> </class> </hibernate-mapping>
รูปแบบ <classname> .hbm.xml ในไฟล์การแมปที่ควรบันทึก เราบันทึก File Employee.hbm.xml ในไฟล์การแมป คุณคุ้นเคยกับรายละเอียดการแมปส่วนใหญ่อยู่แล้ว แต่ลองดูองค์ประกอบทั้งหมดในไฟล์การแมปอีกครั้ง:
เอกสารที่แมปเป็นเอกสาร XML ที่มี <Hibernate-Mapping> เป็นองค์ประกอบรูทที่สอดคล้องกับแต่ละคลาสที่มีองค์ประกอบ 2 <class>
องค์ประกอบ <class> ใช้เพื่อกำหนดตารางฐานข้อมูลการแมปเฉพาะจากคลาส Java ชื่อคลาส Java ระบุแอตทริบิวต์ชื่อขององค์ประกอบคลาสและชื่อตารางแอตทริบิวต์ชื่อตารางระบุ
องค์ประกอบ <meta> เป็นองค์ประกอบเสริมที่สามารถใช้ในการสร้างคำอธิบายของคลาส
องค์ประกอบ <id> แมปแอตทริบิวต์ ID ที่ไม่ซ้ำกันในคลาสกับคีย์หลักของตารางฐานข้อมูล แอตทริบิวต์ชื่อขององค์ประกอบ ID หมายถึงคลาสของแอตทริบิวต์และแอตทริบิวต์คอลัมน์หมายถึงคอลัมน์ในตารางฐานข้อมูล แอตทริบิวต์ประเภทบันทึกประเภทการแมปไฮเบอร์เนตซึ่งจะถูกแปลงจาก Java เป็นประเภทข้อมูล SQL
องค์ประกอบ <erenator> ภายในองค์ประกอบ ID ใช้เพื่อสร้างค่าคีย์หลักโดยอัตโนมัติ ตั้งค่าแอ็ตทริบิวต์คลาสขององค์ประกอบที่สร้างขึ้นเพื่อให้ได้รับข้อมูลจำเพาะของ Hibernate Pick Up, ลำดับหรืออัลกอริทึม HILO เพื่อสร้างคีย์หลักตามความสามารถในการสนับสนุนของฐานข้อมูลพื้นฐาน
องค์ประกอบ <porement> ใช้เพื่อแมปคุณสมบัติของคลาส Java ไปยังคอลัมน์ในตารางฐานข้อมูล แอตทริบิวต์ชื่อขององค์ประกอบหมายถึงคลาสของแอตทริบิวต์และแอตทริบิวต์คอลัมน์หมายถึงคอลัมน์ในตารางฐานข้อมูล แอตทริบิวต์ประเภทบันทึกประเภทการแมปไฮเบอร์เนตซึ่งจะถูกแปลงจาก Java เป็นประเภทข้อมูล SQL
องค์ประกอบ <et> ตั้งค่าความสัมพันธ์ระหว่างใบรับรองและคลาสพนักงาน เราใช้องค์ประกอบ <et> ในแอตทริบิวต์ Cascade เพื่อบอก Hibernate เพื่อบันทึกวัตถุใบรับรองและเป็นวัตถุพนักงาน แอตทริบิวต์ชื่อถูกตั้งค่าเป็นชุดของตัวแปรที่กำหนดไว้ในคลาสหลักในตัวอย่างของเราคือใบรับรอง สำหรับชุดของตัวแปรแต่ละชุดเราจำเป็นต้องกำหนดชุดองค์ประกอบแยกต่างหากในไฟล์การแมป
องค์ประกอบ <sey> เป็นวัตถุหลักที่มีคีย์ต่างประเทศนั่นคือคอลัมน์ในตารางใบรับรอง พนักงานตาราง
องค์ประกอบ <หนึ่งถึงหลายคน> ระบุว่าวัตถุพนักงานเกี่ยวข้องกับใบรับรองจำนวนมาก
สร้างคลาสแอปพลิเคชัน:
ในที่สุดเราจะสร้างวิธีการหลัก () ของคลาสแอปพลิเคชันเพื่อเรียกใช้แอปพลิเคชัน เราจะใช้แอพนี้เพื่อบันทึกพนักงานบางคนพร้อมกับใบรับรองบันทึกและจากนั้นเราจะใช้บันทึกการดำเนินงาน CRUD
นำเข้า Java.util.*; นำเข้า org.hibernate.HibernateException; นำเข้า org.hibernate.session; นำเข้า org.hibernate.transaction; นำเข้า org.hibernate.sessionfactory; นำเข้า org.hibernate.cfg.configuration; การจัดการระดับสาธารณะ โมฆะคงที่สาธารณะหลัก (สตริง [] args) {ลอง {โรงงาน = การกำหนดค่าใหม่ (). configure (). buildSessionFactory (); } catch (throwable ex) {system.err.println ("ล้มเหลวในการสร้างวัตถุ SessionFactory" + ex); โยนข้อยกเว้นใหม่ IniniNitializerError (EX); } managemployee me = new Managemployee (); / * ให้เรามีชุดใบรับรองสำหรับพนักงานคนแรก */ hashset set1 = new hashset (); set1.add (ใบรับรองใหม่ ("MCA")); set1.add (ใบรับรองใหม่ ("MBA")); set1.add (ใบรับรองใหม่ ("MBA")); set1.add (ใบรับรองใหม่ ("PMP")); / * เพิ่มระเบียนพนักงานในฐานข้อมูล */ จำนวนเต็ม EMPID1 = Me.addemployee ("Manoj", "Kumar", 4000, set1); / * ชุดใบรับรองอื่นสำหรับพนักงานคนที่สอง */ hashset set2 = new hashset (); set2.add (ใบรับรองใหม่ ("BCA")); set2.add (ใบรับรองใหม่ ("ba")); / * เพิ่มระเบียนพนักงานอื่นในฐานข้อมูล */ จำนวนเต็ม Empid2 = Me.addemployee ("Dilip", "Kumar", 3000, set2); / * แสดงรายการพนักงานทั้งหมด */ me.listemployee (); / * อัปเดตบันทึกเงินเดือนของพนักงาน */ me.updateemployee (EMPID1, 5000); / * ลบพนักงานจากฐานข้อมูล */ me.deleteEmployee (EMPID2); / * แสดงรายการพนักงานทั้งหมด */ me.listemployee (); } / * เมธอดเพื่อเพิ่มระเบียนพนักงานในฐานข้อมูล * / addemployee (String fname, String lname, เงินเดือน int, cert cert) {เซสชัน session = factory.opensession (); ธุรกรรม tx = null; จำนวนเต็ม EmployeeId = null; ลอง {tx = session.beginTransaction (); พนักงานพนักงานพนักงาน = พนักงานใหม่ (fname, lname, เงินเดือน); Employee.SetCertificates (ใบรับรอง); EmployeeId = (จำนวนเต็ม) เซสชั่น SAVE (พนักงาน); tx.commit (); } catch (hibernateException e) {ถ้า (tx! = null) tx.rollback (); E.PrintStackTrace (); } ในที่สุด {session.close (); } return EmployeeId; } / * วิธีการแสดงรายละเอียดพนักงานทั้งหมด * / โมฆะสาธารณะ Listemployees () {เซสชันเซสชัน = factory.opensession (); ธุรกรรม tx = null; ลอง {tx = session.beginTransaction (); รายการพนักงาน = เซสชัน. createquery ("จากพนักงาน"). list (); สำหรับ (iterator iterator1 = พนักงาน. titerator (); iterator1.hasnext ();) {พนักงานพนักงาน = (พนักงาน) iterator1.next (); System.out.print ("ชื่อแรก:" + Employee.getFirstName ()); System.out.print ("นามสกุล:" + Employee.getLastName ()); System.out.println ("เงินเดือน:" + Employee.getSalary ()); SET CERTIVETATES = Employee.GetCertificates (); สำหรับ (iterator iterator2 = certificates.iterator (); iterator2.hasnext ();) {ใบรับรอง certname = (ใบรับรอง) iterator2.next (); System.out.println ("ใบรับรอง:" + certname.getName ()); }} tx.Commit (); } catch (hibernateException e) {ถ้า (tx! = null) tx.rollback (); E.PrintStackTrace (); } ในที่สุด {session.close (); }} / * วิธีการอัปเดตเงินเดือนสำหรับพนักงาน * / โมฆะสาธารณะอัพเดต public updateMployee (จำนวนเต็ม EmployeeId, เงินเดือน int) {เซสชันเซสชัน = factory.opensession (); ธุรกรรม tx = null; ลอง {tx = session.beginTransaction (); พนักงานพนักงานพนักงาน = (พนักงาน) เซสชั่น get (Employee.class, EmployeeId); พนักงาน. Setsalary (เงินเดือน); session.update (พนักงาน); tx.commit (); } catch (hibernateException e) {ถ้า (tx! = null) tx.rollback (); E.PrintStackTrace (); } ในที่สุด {session.close (); }} / * วิธีการลบพนักงานออกจากบันทึก * / โมฆะสาธารณะ deleteemployee (จำนวนเต็ม EmployeeId) {เซสชันเซสชัน = factory.opensession (); ธุรกรรม tx = null; ลอง {tx = session.beginTransaction (); พนักงานพนักงานพนักงาน = (พนักงาน) เซสชั่น get (Employee.class, EmployeeId); session.delete (พนักงาน); tx.commit (); } catch (hibernateException e) {ถ้า (tx! = null) tx.rollback (); E.PrintStackTrace (); } ในที่สุด {session.close (); - รวบรวมและดำเนินการ:
$ java managemployee
..... ข้อความบันทึกต่าง ๆ จะแสดงที่นี่ ......... ชื่อแรก: Manoj นามสกุล: Kumar เงินเดือน: 4000Certificate: MBACERTIFICATE: PMPCERTIFICATE: MCAFIRST ชื่อ: DILIP นามสกุล: KUMAR เงินเดือน: 3000Certificate: BCACERTICATE: BAFIRST
หากคุณตรวจสอบแบบฟอร์มพนักงานและใบรับรองคุณควรบันทึก:
mysql> เลือก * จากพนักงาน;
- id | first_name | Last_name | เงินเดือน |+--------------------------------+------------+----------+| 1 | Manoj | Kumar | 5000 |+----------------------------+---------+1 แถวในชุด (0.00 วินาที)
mysql> เลือก * จากใบรับรอง;
- -