วางแผนภาพการเปลี่ยนแปลงสามสถานะที่นี่เพื่ออำนวยความสะดวกในการทำงานของวิธีการวิเคราะห์:
1.Session Save () วิธีการ
เซสชั่นเป็นอินเทอร์เฟซที่สำคัญที่สุดระหว่างอินเทอร์เฟซไฮเบอร์เนตทั้งหมดโดยให้วิธีการสำหรับการบันทึกอัปเดตการสอบถามและการลบข้อมูล
วิธีการบันทึกของเซสชัน () สามารถแปลงสถานะชั่วคราวหรือสถานะอิสระเป็นสถานะถาวร ตัวอย่างเช่นบันทึกวัตถุลูกค้า:
SessionFactory SessionFactory; การกำหนดค่าการกำหนดค่า = การกำหนดค่าใหม่ (). configure (); sessionFactory = configuration.buildSessionFactory (); เซสชัน session = sessionFactory.opensession (); ธุรกรรม TR = session.beginTransaction (); // 1 สร้างลูกค้าวัตถุลูกค้า C1 = ลูกค้าใหม่ (); c1.setId (ใหม่ยาว (1)); c1.setName ("ทดสอบ"); c1.setemail ("[email protected]"); c1.setpassword ("123456"); c1.setaddress ("สวรรค์"); // 2 โทรหาวิธีการบันทึก () ของเซสชันเพื่อคงอยู่เซสชันวัตถุลูกค้า Save (C1); tr.commit (); session.close ();วิธีการบันทึก () ส่วนใหญ่ทำสามสิ่งต่อไปนี้:
(1) วางวัตถุลูกค้าชั่วคราวที่สร้างขึ้นโดยใหม่ลงในแคชเพื่อให้ยังคงอยู่
(2) ในเวลาเดียวกันตามตัวกำเนิด OID ที่ตั้งไว้ในไฟล์การแมปความสัมพันธ์ของวัตถุนั่นคือวิธีการสร้างคีย์หลักจะสร้าง OID ที่ไม่ซ้ำกันสำหรับวัตถุ
<!-ตั้งค่าคีย์หลัก-> <idname = "id" คอลัมน์ = "id" type = "long"> <!-วิธีการสร้างคีย์หลัก-> <generatorclass = "เพิ่มขึ้น"/> </id>
มีคำถามในสถานที่นี้ เมื่อสร้างวัตถุไม่ว่าจะเป็นเมธอด setId () จะสร้างคีย์หลักสำหรับการคงอยู่ของวัตถุ ในความเป็นจริงมันไม่ได้ SETID ไม่ได้สร้างคีย์หลักตามที่เราตั้งไว้ แต่สร้างคีย์หลักตามวิธีการสร้างคีย์หลักที่กำหนดค่าในไฟล์การแมปความสัมพันธ์ของวัตถุ มันสามารถทำงานได้มากกว่าหลายเท่าและคีย์หลักเติบโตขึ้นด้วยตัวเอง คุณสามารถดูข้อมูลหลายชิ้นจากฐานข้อมูล คีย์หลักเริ่มจาก 1 ดังนั้นคุณสามารถรู้ได้ว่า setId ()
คีย์หลักไม่ได้ตั้งค่ามิฉะนั้นการตรวจสอบคีย์หลักของฐานข้อมูลจะไม่สามารถทำได้
นอกจากนี้เรายังสามารถตั้งค่าคีย์หลักด้วยตนเอง เราต้องโอเวอร์โหลดเมธอด save () ใช้วิธีการเกินพิกัดบันทึก (C1, newlong (1)) และตั้งค่าด้วยตนเองทุกครั้ง
(3) วางแผนที่จะดำเนินการคำสั่งแทรก โปรดทราบว่าคำสั่งแทรกไม่ได้ดำเนินการทันทีและคำสั่งแทรกจะถูกดำเนินการเฉพาะเมื่อเซสชันทำความสะอาดแคช TR.COMMIT () การทำธุรกรรม
2. วิธีการอัปเดตของ Session ()
เปลี่ยนวัตถุสถานะอิสระให้กลายเป็นวัตถุถาวร ตัวอย่างเช่น:
SessionFactory SessionFactory; การกำหนดค่าการกำหนดค่า = การกำหนดค่าใหม่ (). configure (); SessionFactory = configuration.buildSessionFactory (); เซสชันเซสชัน 1 = เซสชัน factory.opensession (); ธุรกรรม TR1 = เซสชัน 1.BegInTransaction (); // 1. สร้างลูกค้าวัตถุลูกค้า c1 = ลูกค้าใหม่ (); c1.setId (ใหม่ยาว (1)); c1.setName ("ทดสอบ"); c1.setemail ("[email protected]"); C1.SetPassword ("123456"); C1.SetAddress ("Paradise"); // 2. การโทรเซสชันบันทึก () วิธีการคงอยู่ของวัตถุลูกค้าเซสชัน 1.save (C1); tr1.commit (); เซสชั่น 1.close (); // 3. อัปเดตวัตถุสถานะอิสระค้นหาการเปลี่ยนแปลงและดำเนินการคำสั่งอัปเดตเซสชันเซสชัน 2 = SessionFactory.opensession (); ธุรกรรม TR2 = เซสชัน 2.BegInTransaction (); C1.SetAddress ("การอัปเดตทดสอบ"); session2.update (C1); tr2.commit (); session2.close ();การอัปเดต () ของเซสชันควรทำสิ่งต่อไปนี้:
(1) เพิ่มวัตถุลูกค้าฟรีลงในแคชเซสชันเพื่อเป็นวัตถุถาวร
(2) เรียกใช้คำสั่ง UPDATE เช่นเดียวกับการบันทึก () เรียกใช้คำสั่งแทรกมันไม่ได้ดำเนินการคำสั่งการอัปเดตทันที เมื่อล้างแคชวัตถุลูกค้าจะถูกรวมลงในคำสั่งอัปเดต
จากนั้นดำเนินการอีกครั้ง
โปรดทราบว่าแม้ว่าลูกค้าจะไม่เปลี่ยนแปลงโดยค่าเริ่มต้นคำสั่งการอัปเดตจะถูกรวบรวมเมื่อล้างแคช หากจำเป็นต้องตั้งค่าให้เปลี่ยนไฟล์การแมปความสัมพันธ์ของวัตถุจะต้องตั้งค่า
3.Session SaveOrUpdate () วิธีการ
เมธอด saveorupdate () มีฟังก์ชั่นของวิธีการบันทึก () และ update () และวิธีการที่แตกต่างกันถูกเรียกตามสถานะของพารามิเตอร์ที่ผ่าน ส่งผ่านวัตถุชั่วคราวเพื่อเรียกวิธีการบันทึก () หากผ่านในวัตถุฟรีเพื่อเรียกมัน
UPDATE () วิธีการ ส่งคืนวัตถุที่เกิดขึ้นถาวร ดังนั้นทุกครั้งที่เราจำเป็นต้องส่งผ่านในวัตถุวิธี SaveOrupdate () ให้ตัดสินสถานะของสถานะวัตถุที่ผ่านโดยอัตโนมัติและเรียกใช้วิธีการประมวลผลแบบไดนามิก
วิธีนี้กำหนดสถานะของวัตถุที่เข้ามาได้อย่างไร เมื่อพบเงื่อนไขใด ๆ ต่อไปนี้มันเป็นสถานะชั่วคราว:
(1) OID ของวัตถุ Java เป็นโมฆะซึ่งหมายความว่าวัตถุนั้นไม่ได้สร้างอินสแตนซ์เป็นอย่างอื่น แม้ว่ามันจะเป็นอินสแตนซ์มันเป็นวัตถุที่ถูกลบและกลายเป็นสถานะชั่วคราวหลังจากลบสถานะอิสระ ในกรณีนี้วัตถุเป็นสถานะชั่วคราว
(2) หากวัตถุ Java มีการควบคุมเวอร์ชันและหมายเลขเวอร์ชันเป็นโมฆะหมายความว่าไม่มีหมายเลขเวอร์ชันของวัตถุ
(3) ปรับแต่ง interceptor, call isunsaved () และส่งคืนค่าเป็นจริง
4. วิธีการโหลดเซสชัน () และรับ ()
ทั้งสองวิธีขึ้นอยู่กับ OID การโหลดวัตถุถาวรจากฐานข้อมูล วัตถุถาวรจะถูกวางไว้ในแคชเซสชันและวัตถุถาวรสามารถดำเนินการได้ตามความต้องการที่แตกต่างกัน
ความแตกต่างระหว่างสอง:
เมื่อไม่มีระเบียนที่สอดคล้องกันใน OID ในฐานข้อมูลโหลด () จะพ่นข้อยกเว้นและรับ () ส่งคืนค่า null
5. เมธอดการลบของเซสชัน ()
DELETE () ตามชื่อหมายถึงใช้เพื่อลบระเบียนที่สอดคล้องกับวัตถุ Java จากฐานข้อมูล
DELETE () หากมีการส่งวัตถุถาวรให้รวบรวมคำสั่งลบและดำเนินการลบ; หากวัตถุสถานะอิสระถูกส่งผ่าน Hibernate First เชื่อมโยงสถานะอิสระเข้ากับเซสชั่นกลายเป็นสถานะถาวรแล้วสร้างคำสั่งลบ
ทำการลบ
ทั้งหมดจะถูกดำเนินการเฉพาะเมื่อแคชเซสชันถูกล้าง
การประหารชีวิตข้างต้นเป็นวัตถุทั้งหมดที่สอดคล้องกับบันทึก
คุณสามารถใช้ session.delete ("fromcustomerwhere ... "); ในการลบข้อมูลหลายข้อมูลหลังจากเพิ่มเงื่อนไข
SessionFactory SessionFactory; การกำหนดค่าการกำหนดค่า = การกำหนดค่าใหม่ (). configure (); SessionFactory = configuration.buildSessionFactory (); เซสชันเซสชัน 1 = เซสชัน factory.opensession (); ธุรกรรม TR1 = เซสชัน 1.BegInTransaction (); // 1. สร้างลูกค้าวัตถุลูกค้า c1 = ลูกค้าใหม่ (); c1.setId (ใหม่ยาว (1)); c1.setName ("ทดสอบ"); c1.setemail ("[email protected]"); C1.SetPassword ("123456"); C1.SetAddress ("Paradise"); // 2. โทรหาวิธีการบันทึก () ของเซสชันเพื่อคงไว้ซึ่งเซสชั่นวัตถุลูกค้า 1.save (C1); tr1.commit (); เซสชั่น 1.close (); // 3. เชื่อมโยงวัตถุสถานะอิสระกับเซสชันล้างแคชหลังจากการคงอยู่และดำเนินการคำสั่งลบ; วางไว้ในสถานะถาวรเพื่อลบโดยตรง; เซสชั่นเซสชัน 2 = sessionfactory.opensession (); ธุรกรรม TR2 = เซสชัน 2.BegInTransaction (); เซสชั่น 2.delete (C1); tr2.commit (); session2.close (); ผลการดำเนินการเอาต์พุตคอนโซล:
ไฮเบอร์เนต: เลือกสูงสุด (id) จากลูกค้า
Hibernate: แทรกเข้าไปในลูกค้า (ชื่อ, อีเมล, รหัสผ่าน, โทรศัพท์, ที่อยู่, เพศ, is_married, คำอธิบาย, ภาพ, วันเกิด, registered_time, id) ค่า (?,?,?,?,?,?,?,?,?,?
Hibernate: ลบจากลูกค้าที่ id =?
สรุป
ข้างต้นเป็นคำอธิบายโดยละเอียดทั้งหมดของเซสชันเพิ่มลบการดัดแปลงและรหัสการดำเนินการค้นหาในไฮเบอร์เนตฉันหวังว่ามันจะเป็นประโยชน์กับทุกคน เพื่อนที่สนใจสามารถอ้างถึงหัวข้ออื่น ๆ ที่เกี่ยวข้องในเว็บไซต์นี้ต่อไป หากมีข้อบกพร่องใด ๆ โปรดฝากข้อความไว้เพื่อชี้ให้เห็น ขอบคุณเพื่อนที่ให้การสนับสนุนเว็บไซต์นี้!