แผนที่แผนที่
แผนที่แผนที่เป็นคอลเลกชัน Java ที่เก็บองค์ประกอบในคู่คีย์-ค่าและไม่อนุญาตให้มีองค์ประกอบที่ซ้ำกันในรายการ อินเทอร์เฟซแผนที่มีมุมมองคอลเลกชันสามครั้งเพื่อให้เนื้อหาแผนที่ได้รับการพิจารณาว่าเป็นชุดของคีย์-ค่าคอลเลกชันหรือการตั้งค่าความสัมพันธ์การแมปคีย์-ค่า
แผนที่ถูกแม็พกับองค์ประกอบ <ap> ในตารางการแมปและแผนที่ที่ไม่ได้เรียงลำดับสามารถเริ่มต้นใน java.util.hashmap
กำหนดตาราง RDBMS:
พิจารณาสถานการณ์ที่เราต้องการบันทึกพนักงานที่จะเก็บไว้ในตารางพนักงานซึ่งจะมีโครงสร้างดังต่อไปนี้:
สร้างพนักงานตาราง (ID int ไม่ใช่ null auto_increment, first_name varchar (20) ค่าเริ่มต้น null, last_name varchar (20) ค่าเริ่มต้น null, เงินเดือน int เริ่มต้น null, คีย์หลัก (id));
นอกจากนี้ยังสันนิษฐานว่าพนักงานแต่ละคนสามารถมีใบรับรองหนึ่งใบหรือมากกว่าที่เกี่ยวข้องกับเขา/เธอ เราจัดเก็บข้อมูลที่เกี่ยวข้องของใบรับรองในตารางแยกต่างหากพร้อมโครงสร้างต่อไปนี้:
สร้างใบรับรองตาราง (ID int ไม่ใช่ NULL AUTO_INCREMENT, CERTIVE_TYPE VARCHAR (40) ค่าเริ่มต้น NULL, CERTIVE_NAME VARCHAR (30) ค่าเริ่มต้น NULL, Employee_id int เริ่มต้น NULL, คีย์หลัก (ID));
มีความสัมพันธ์แบบหนึ่งต่อหลายคนระหว่างพนักงานและวัตถุใบรับรอง
กำหนดคลาส Pojo:
ลองใช้พนักงานระดับ POJO ที่จะใช้เก็บรวบรวมวัตถุในตารางพนักงานและตัวแปรรายการพร้อมใบรับรอง
นำเข้า java.util.*; พนักงานชั้นเรียนสาธารณะ {ID INT ส่วนตัว; สตริงส่วนตัวชื่อแรก; สตริงส่วนตัวนามสกุล; เงินเดือนส่วนตัว ใบรับรองแผนที่ส่วนตัว พนักงานสาธารณะ () {} พนักงานสาธารณะ (สตริง fname, สตริง lname, เงินเดือน int) {this.firstname = fname; this.lastName = lName; this.salary = เงินเดือน; } สาธารณะ 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 = เงินเดือน; } แผนที่สาธารณะ getCertificates () {ใบรับรองส่งคืน; } โมฆะสาธารณะ setCertificates (ใบรับรองแผนที่) {this.certificates = ใบรับรอง; -เราต้องการตารางใบรับรองที่เกี่ยวข้องเพื่อกำหนดคลาส POJO อื่นเช่นวัตถุใบรับรองสามารถจัดเก็บและดึงตารางใบรับรอง
ใบรับรองชั้นเรียนสาธารณะ {ID INT ส่วนตัว; ชื่อสตริงส่วนตัว; ใบรับรองสาธารณะ () {} ใบรับรองสาธารณะ (ชื่อสตริง) {this.name = name; } สาธารณะ int getId () {return id; } โมฆะสาธารณะ setId (int id) {this.id = id; } สตริงสาธารณะ getName () {ชื่อคืน; } โมฆะสาธารณะ setName (ชื่อสตริง) {this.name = name; - กำหนดไฟล์การแมปไฮเบอร์เนต:
มาพัฒนาไฟล์การทำแผนที่ที่แนะนำวิธีการกำหนดค่าไฮเบอร์เนตว่าจะกำหนดคลาสที่แมปไปยังตารางฐานข้อมูลได้อย่างไร องค์ประกอบ <ap> จะถูกใช้เพื่อกำหนดกฎสำหรับแผนที่ที่ใช้
<? 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> <map name = "ใบรับรอง" cascade = "all"> <key column = "Employee_id"/> <index column = "certificate_type" type = "String"/> < name = "LastName" คอลัมน์ = "last_name" type = "string"/> <property name = "เงินเดือน" คอลัมน์ = "เงินเดือน" type = "int"/> </class> <class name = "Certificate" table = "ใบรับรอง"> <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 ใช้เพื่อสร้างค่าคีย์หลักโดยอัตโนมัติ ตั้งค่าแอตทริบิวต์คลาสขององค์ประกอบที่สร้างขึ้นเพื่อให้ไฮเบอร์เนตรับอัลกอริทึมในตัวตนลำดับหรือ HILO เพื่อสร้างคีย์หลักตามความสามารถในการสนับสนุนของฐานข้อมูลพื้นฐาน
องค์ประกอบ <porement> ใช้เพื่อแมปคุณสมบัติของคลาส Java ไปยังคอลัมน์ในตารางฐานข้อมูล แอตทริบิวต์ชื่อขององค์ประกอบหมายถึงคลาสของแอตทริบิวต์และแอตทริบิวต์คอลัมน์หมายถึงคอลัมน์ในตารางฐานข้อมูล แอตทริบิวต์ประเภทบันทึกประเภทการแมปไฮเบอร์เนตซึ่งจะถูกแปลงจาก Java เป็นประเภทข้อมูล SQL
องค์ประกอบ <AP> ใช้เพื่อตั้งค่าความสัมพันธ์ระหว่างใบรับรองและคลาสพนักงาน เราใช้องค์ประกอบ <p> ของแอตทริบิวต์ Cascade เพื่อบอก Hibernate เพื่อบันทึกวัตถุใบรับรองและไปยังวัตถุพนักงาน แอตทริบิวต์ชื่อถูกตั้งค่าเพื่อกำหนด MapVariable ในคลาสหลักในกรณีของเราใบรับรอง
องค์ประกอบ <plell> ใช้เพื่อแสดงคู่คีย์/ค่าของคีย์และค่า คีย์นี้จะใช้ประเภทสตริงที่เก็บไว้ในคอลัมน์ใบรับรอง _Type
องค์ประกอบ <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 (); / * ให้เรามีชุดใบรับรองสำหรับพนักงานคนแรก */ hashmap set = new hashmap (); set.put ("คอมพิวเตอร์", ใบรับรองใหม่ ("MCA")); set.put ("การจัดการธุรกิจ", ใบรับรองใหม่ ("MBA")); set.put ("ProjectManagement", ใบรับรองใหม่ ("PMP")); / * เพิ่มระเบียนพนักงานในฐานข้อมูล */ จำนวนเต็ม empid = me.addemployee ("manoj", "kumar", 4000, set); / * แสดงรายการพนักงานทั้งหมด */ me.listemployee (); / * อัปเดตบันทึกเงินเดือนของพนักงาน */ me.updateemployee (EMPID, 5000); / * แสดงรายการพนักงานทั้งหมด */ me.listemployees (); } / * เมธอดเพื่อเพิ่มระเบียนพนักงานในฐานข้อมูล * / addemployee (String fname, String lname, เงินเดือน int, cert hashmap) {เซสชันเซสชัน = 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 ()); MAP EC = Employee.getCertificates (); System.out.println ("ใบรับรอง:" + ((((ใบรับรอง) ec.get ("คอมพิวเตอร์")). getName ())); system.out.println ("ใบรับรอง:" + ((ใบรับรอง) ec.get ("การจัดการธุรกิจ"). getName ()); (((ใบรับรอง) ec.get ("ProjectManagement")). getName ())); System.out.println ("ใบรับรอง:" + (((ใบรับรอง) Ec.get ("ProjectManagement"). getName ());} tx.Commit (); E.PrintStackTrace (); พนักงาน); deleteemployee (จำนวนพนักงานจำนวนมาก) {เซสชัน = โรงงาน. opensession (); (tx! = null) tx.rollback (); รวบรวมและดำเนินการ:
นี่คือขั้นตอนในการรวบรวมและเรียกใช้แอปพลิเคชันด้านบน โปรดตรวจสอบให้แน่ใจว่าคุณได้ตั้งค่า PATH และ ClassPath อย่างเหมาะสมก่อนที่จะรวบรวมและดำเนินการ
ผลลัพธ์ต่อไปนี้จะได้รับบนหน้าจอและบันทึกถูกสร้างขึ้นทั้งในรูปแบบพนักงานและใบรับรอง
$ java managemployee
..... ข้อความบันทึกต่างๆจะแสดงที่นี่ .........
ชื่อแรก: Manoj นามสกุล: Kumar เงินเดือน: 4000Certificate: McAcertificate: MBACERTIFICATE: PMPFIRST ชื่อ: MANOJ นามสกุล: KUMAR เงินเดือน: 5000CERTIFICATE: MCACERTIFICATE: MBACERTIFICATE: PMP
หากคุณตรวจสอบแบบฟอร์มพนักงานและใบรับรองคุณควรบันทึก:
mysql> เลือก * จากพนักงาน;
- id | first_name | Last_name | เงินเดือน |+----------------------------------+---------------+| 60 | Manoj | Kumar | 5000 |+-----------------------------+---------+1 แถวในชุด (0.00 วินาที)
mysql> เลือก * จากใบรับรอง;
- -
SortedMap Mapping
SortedMap เป็นองค์ประกอบที่เก็บไว้ในคู่คีย์-ค่าและจัดเรียงคีย์โดยรวมที่คล้ายกับคอลเลกชัน Java สำหรับการแมป องค์ประกอบที่ซ้ำกันไม่ได้รับอนุญาตในการทำแผนที่ แผนที่ถูกจัดเรียงตามลำดับตามธรรมชาติของกุญแจหรือโดยการเปรียบเทียบโดยปกติในเวลาสร้างของแผนที่ที่สั่งซื้อ
องค์ประกอบ <pac> และแผนที่ที่สั่งซื้อที่เรียงลำดับแมปถูกแมปในตารางการทำแผนที่สามารถเริ่มต้นใน java.util.treemap
เรายังคงใช้ตาราง RDBMS และคลาส POJO ที่กำหนดไว้ด้านบนเพื่อแสดงตัวอย่างต่อไปนี้:
กำหนดไฟล์การแมปไฮเบอร์เนต:
มาพัฒนาไฟล์การทำแผนที่ที่แนะนำวิธีการกำหนดค่าไฮเบอร์เนตว่าจะกำหนดคลาสที่แมปไปยังตารางฐานข้อมูลได้อย่างไร องค์ประกอบ <ap> จะถูกใช้เพื่อกำหนดกฎสำหรับแผนที่ที่ใช้
<? 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> <map name = "ใบรับรอง" cascade = "all" sort = "myclass"> <คอลัมน์คีย์ = "exprovee_id"/> <index = "first name =" first name type = "string"/> <property name = "LastName" คอลัมน์ = "last_name" type = "string"/> <property name = "เงินเดือน" คอลัมน์ = "salary" type = "int"/> </class> <class name = "certificate" table = "ใบรับรอง"> <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 Mapping Employee.hbm.xml คุ้นเคยกับรายละเอียดการแมปส่วนใหญ่แล้ว แต่ลองดูองค์ประกอบทั้งหมดในไฟล์การแมปอีกครั้ง:
เอกสารที่แม็พเป็นเอกสาร XML ที่มีองค์ประกอบรูทของ <Hibernate-Mapping> ที่สอดคล้องกับแต่ละคลาสที่มีองค์ประกอบ 2 <class>
องค์ประกอบ <class> ใช้เพื่อกำหนดตารางฐานข้อมูลการแมปเฉพาะจากคลาส Java ชื่อคลาส Java ระบุแอตทริบิวต์ชื่อขององค์ประกอบคลาสและชื่อตารางแอตทริบิวต์ชื่อตารางระบุ
องค์ประกอบ <meta> เป็นองค์ประกอบเสริมที่สามารถใช้ในการสร้างคำอธิบายของคลาส
องค์ประกอบ <id> แมปแอตทริบิวต์ ID ที่ไม่ซ้ำกันในคลาสกับคีย์หลักของตารางฐานข้อมูล แอตทริบิวต์ชื่อขององค์ประกอบ ID หมายถึงคลาสของแอตทริบิวต์และแอตทริบิวต์คอลัมน์หมายถึงคอลัมน์ในตารางฐานข้อมูล แอตทริบิวต์ประเภทบันทึกประเภทการแมปไฮเบอร์เนตซึ่งจะถูกแปลงจาก Java เป็นประเภทข้อมูล SQL
องค์ประกอบ <erenator> ภายในองค์ประกอบ ID ใช้เพื่อสร้างค่าคีย์หลักโดยอัตโนมัติ ตั้งค่าแอตทริบิวต์คลาสขององค์ประกอบที่สร้างขึ้นเพื่อสร้างไฮเบอร์เนตที่สอดคล้องกับอัลกอริทึมในตัวตนลำดับหรือ HILO เพื่อสร้างคีย์หลักตามความสามารถในการสนับสนุนของฐานข้อมูลพื้นฐาน
องค์ประกอบ <porement> ใช้เพื่อแมปคุณสมบัติของคลาส Java ไปยังคอลัมน์ในตารางฐานข้อมูล แอตทริบิวต์ชื่อขององค์ประกอบหมายถึงคลาสของแอตทริบิวต์และแอตทริบิวต์คอลัมน์หมายถึงคอลัมน์ในตารางฐานข้อมูล แอตทริบิวต์ประเภทบันทึกประเภทการแมปไฮเบอร์เนตซึ่งจะถูกแปลงจาก Java เป็นประเภทข้อมูล SQL
องค์ประกอบ <AP> ใช้เพื่อตั้งค่าความสัมพันธ์ระหว่างใบรับรองและคลาสพนักงาน เราใช้องค์ประกอบ <p> ของแอตทริบิวต์ Cascade เพื่อบอก Hibernate เพื่อบันทึกวัตถุใบรับรองและไปยังวัตถุพนักงาน แอตทริบิวต์ชื่อถูกตั้งค่าเป็นตัวแปร SortEdMap ที่กำหนดไว้ในคลาสหลักในกรณีของเรามันเป็นใบรับรอง คุณสมบัติการเรียงลำดับสามารถตั้งค่าเป็นการเรียงลำดับตามธรรมชาติหรือสามารถตั้งค่าเป็นคลาสที่กำหนดเองเป็น java.util.comparator เราได้ใช้คลาส MyClass ที่ใช้มันเป็น java.util.Comparator เพื่อย้อนกลับลำดับการเรียงลำดับของการใช้งานคลาสใบรับรอง
องค์ประกอบ <plell> ใช้เพื่อแสดงส่วนสำคัญของแผนที่คู่/ค่าคู่ คีย์นี้จะใช้ประเภทสตริงที่เก็บไว้ในคอลัมน์ใบรับรอง _Type
องค์ประกอบ <sey> เป็นวัตถุหลักที่มีคีย์ต่างประเทศนั่นคือคอลัมน์ในตารางใบรับรอง พนักงานตาราง
องค์ประกอบ <หนึ่งถึงหลายคน> ระบุว่าวัตถุพนักงานเกี่ยวข้องกับวัตถุใบรับรองจำนวนมากดังนั้นวัตถุใบรับรองจะต้องเชื่อมโยงกับผู้ปกครองของพนักงาน คุณสามารถใช้องค์ประกอบ <หนึ่งต่อหนึ่ง>, <หลายต่อหนึ่ง> หรือ <หลายต่อหลายคน> ตามต้องการ
หากคุณใช้ Sort = "Natural" เราไม่จำเป็นต้องสร้างคลาสแยกต่างหากเนื่องจากคลาสใบรับรองได้ใช้อินเตอร์เฟสที่เปรียบเทียบได้และ Hibernate จะใช้ comperTo ในคลาสใบรับรองที่กำหนดเป็นวิธีการ SortEdMap () อย่างไรก็ตามเรากำลังใช้คลาสเปรียบเทียบที่กำหนดเอง MyClass ในไฟล์การแมปของเราดังนั้นเราต้องสร้างคลาสนี้ตามอัลกอริทึมการเรียงลำดับของเรา มาทำการเรียงลำดับคีย์ที่มีอยู่บนแผนที่กันเถอะ
นำเข้า java.util.Comparator; คลาสสาธารณะ MyClass ใช้ตัวเปรียบเทียบ <String> {INT สาธารณะเปรียบเทียบ (สตริง O1, สตริง O2) {int สุดท้ายก่อน = -1; int สุดท้ายหลัง = 1; / * หากต้องการย้อนกลับลำดับการเรียงลำดับหลายตัวโดย -1 */ if (o2 == null) {return ก่อน * -1; } เปรียบเทียบ thiscertificate = O1; เทียบเท่ากับสิ่งที่ให้ความรู้ = O2; if (thiscertificate == null) {return หลังจาก * 1; } อื่นถ้า (thatcertificate == null) {return ก่อน * -1; } else {return thiscertificate.compareto (thatcertificate) * -1; -ในที่สุดเราจะสร้างวิธีการหลัก () ของคลาสแอปพลิเคชันเพื่อเรียกใช้แอปพลิเคชัน เราจะใช้แอปพลิเคชันนี้เพื่อบันทึกระเบียนพนักงานบางส่วนพร้อมกับใบรับรองจากนั้นเราจะส่งการดำเนินการ 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 (); / * ให้เรามีชุดใบรับรองสำหรับพนักงานคนแรก */ treemap set1 = ใหม่ treemap (); set1.put ("คอมพิวเตอร์", ใบรับรองใหม่ ("MCA")); set1.put ("การจัดการธุรกิจ", ใบรับรองใหม่ ("MBA")); set1.put ("ProjectManagement", ใบรับรองใหม่ ("PMP")); / * เพิ่มระเบียนพนักงานในฐานข้อมูล */ จำนวนเต็ม EMPID1 = Me.addemployee ("Manoj", "Kumar", 4000, set1); / * ชุดใบรับรองอื่นสำหรับพนักงานคนที่สอง */ treemap set2 = new treemap (); set2.put ("คอมพิวเตอร์", ใบรับรองใหม่ ("MCA")); set2.put ("การจัดการธุรกิจ", ใบรับรองใหม่ ("MBA")); / * เพิ่มระเบียนพนักงานอื่นในฐานข้อมูล */ จำนวนเต็ม Empid2 = Me.addemployee ("Dilip", "Kumar", 3000, set2); / * แสดงรายการพนักงานทั้งหมด */ me.listemployee (); / * อัปเดตบันทึกเงินเดือนของพนักงาน */ me.updateemployee (EMPID1, 5000); / * ลบพนักงานจากฐานข้อมูล */ me.deleteEmployee (EMPID2); / * แสดงรายการพนักงานทั้งหมด */ me.listemployees (); } / * วิธีการเพิ่มระเบียนพนักงานในฐานข้อมูล * / addemployee จำนวนเต็มสาธารณะ (สตริง fname, สตริง lname, เงินเดือน int, ใบรับรอง treemap) {เซสชันเซสชัน = 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 ()); SortedMap <String, ใบรับรอง> MAP = Employee.getCertificates (); สำหรับ (map.entry <string, ใบรับรอง> รายการ: map.entryset ()) {system.out.print ("/tcertificate ประเภท:" + entry.getKey ()); System.out.println (", ชื่อ:" + (entry.getValue ()). 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 (); - รวบรวมและดำเนินการ:
คุณจะเห็นว่าใบรับรองได้รับการจัดเรียงตามลำดับตรงกันข้าม คุณสามารถลองได้โดยการเปลี่ยนไฟล์การแมปเพียง SET SOLT = "Natural" และดำเนินการโปรแกรมและเปรียบเทียบผลลัพธ์
$ java managemployee
..... ข้อความบันทึกต่าง ๆ จะแสดงที่นี่ ......... ชื่อแรก: Manoj นามสกุล: Kumar เงินเดือน: 4000 ใบรับรองประเภท: ProjectManagement, ชื่อ: PMP ประเภทใบรับรอง: คอมพิวเตอร์ชื่อ, ชื่อ: MCA ประเภทใบรับรอง: การจัดการธุรกิจ, ชื่อ: MBAFIRST ชื่อ: ชื่อ: MANOAMATION ชื่อ เงินเดือน Kumar: 5000 ใบรับรองประเภท: ProjectManagement, ชื่อ: PMP ใบรับรองประเภท: คอมพิวเตอร์ชื่อ: MCA ประเภทใบรับรอง: การจัดการธุรกิจ, ชื่อ: MBA
หากคุณตรวจสอบแบบฟอร์มพนักงานและใบรับรองคุณควรบันทึก:
mysql> เลือก * จากพนักงาน;
- id | first_name | Last_name | เงินเดือน |+--------------------------------+-------------+------------+| 74 | Manoj | Kumar | 5000 |+----------------------------+---------+1 แถวในชุด (0.00 วินาที)
mysql> เลือก * จากใบรับรอง;
- -