ความรู้ที่เกี่ยวข้องกับแบบสอบถามไฮเบอร์เนต เวลา: 04-10-2552 07:14:25 แหล่งที่มา: อินเทอร์เน็ต ผู้แต่ง: ไม่ทราบ จำนวนคลิก: 146 ครั้ง ขั้นแรกแนะนำความแตกต่างระหว่างวิธีการ get() และ load():
ความแตกต่างระหว่างเมธอด get() และเมธอด load() อยู่ที่การใช้แคชระดับที่สองเป็นหลัก
วิธีการ load() จะใช้แคชระดับที่สอง และวิธีการ get() จะสอบถามฐานข้อมูลโดยตรงหากไม่พบในแคชระดับแรก และจะไม่ค้นหาในแคชระดับที่สอง
get(): หากคุณแนะนำความแตกต่างระหว่างเมธอด get() และ load() ในฐานข้อมูลเป็นครั้งแรก:
ความแตกต่างระหว่างเมธอด get() และเมธอด load() อยู่ที่การใช้แคชระดับที่สองเป็นหลัก
วิธีการ load() จะใช้แคชระดับที่สอง และวิธีการ get() จะสอบถามฐานข้อมูลโดยตรงหากไม่พบในแคชระดับแรก และจะไม่ค้นหาในแคชระดับที่สอง
get() : หากไม่มีบันทึกในฐานข้อมูลก็จะคืนค่าเป็นโมฆะ get() จะส่งคืนข้อมูลต่อไป
load(): หากไม่มีบันทึกในฐานข้อมูล ข้อยกเว้นจะถูกส่งออกไป หากมีข้อมูล ออบเจ็กต์พร็อกซีจะถูกส่งกลับ
ความแตกต่างระหว่างเมธอด list และ iterator(): (N+1?)
เมื่อดำเนินการเมธอด list() มันจะรันคำสั่งการสืบค้นที่จำเป็นสำหรับผลลัพธ์การสืบค้นโดยตรง
อันดับแรกเมธอด iterator() จะดำเนินการค้นหาเพื่อรับ ID อ็อบเจ็กต์ จากนั้นรับอ็อบเจ็กต์ที่จะสอบถามตามค่า ID แต่ละค่า
ดังนั้น: สำหรับการสืบค้นโดยใช้เมธอด list() โดยปกติจะมีการดำเนินการคำสั่ง SQL เพียงคำสั่งเดียวเท่านั้น ในขณะที่สำหรับการสืบค้นโดยใช้เมธอด iterator() อาจจำเป็นต้องดำเนินการคำสั่ง SQL N+1 (N คือจำนวนบันทึกในชุดผลลัพธ์ ).
ชุดผลลัพธ์ได้รับการประมวลผลแตกต่างกัน:
เมธอด list() จะเปิดใช้งานออบเจ็กต์ชุดผลลัพธ์ทั้งหมดพร้อมกัน และจะเริ่มต้นออบเจ็กต์ชุดผลลัพธ์ทั้งหมดตามผลลัพธ์ของแบบสอบถาม หากชุดผลลัพธ์มีขนาดใหญ่มาก ก็จะใช้หน่วยความจำจำนวนมากและยังทำให้หน่วยความจำล้นอีกด้วย
เมธอด iterator() ไม่ได้เตรียมใช้งานอ็อบเจ็กต์ทั้งหมดในครั้งเดียวระหว่างการดำเนินการ แต่เตรียมใช้งานอ็อบเจ็กต์ตามการเข้าถึงชุดผลลัพธ์ คุณสามารถควบคุมจำนวนอ็อบเจ็กต์ในแคชระหว่างการเข้าถึงครั้งเดียวเพื่อหลีกเลี่ยงการใช้แคชมากเกินไปและทำให้หน่วยความจำล้น
HQL: HQL เป็นภาษาคิวรีเชิงวัตถุ วัตถุปฏิบัติการของ HQL ได้แก่ คลาส อินสแตนซ์ คุณลักษณะ ฯลฯ
SQL: ออบเจ็กต์การทำงานของ sql คือออบเจ็กต์ข้อมูล เช่น ตารางข้อมูลและคอลัมน์
Hql เป็นภาษาคิวรีเชิงวัตถุโดยสมบูรณ์ ดังนั้นจึงสามารถรองรับฟีเจอร์ต่างๆ เช่น การสืบทอดและหลายรายการได้
การสืบค้น HQL อาศัยคลาสการสืบค้น และอินสแตนซ์การสืบค้นแต่ละรายการจะสอดคล้องกับออบเจ็กต์การสืบค้น
ฟังก์ชั่นการตั้งค่าพารามิเตอร์ อินเทอร์เฟซแบบสอบถามคืออินเทอร์เฟซแบบสอบถาม HQL จริง
//สร้างวัตถุแบบสอบถาม
แบบสอบถาม query = session.createQuery ("จากลูกค้าเป็น c โดยที่ c.name=:customerName และ c.age=:customerAge");
//พารามิเตอร์การเชื่อมโยงแบบไดนามิก
query.setString("ชื่อลูกค้า", "ทอม");
query.setInteger("ลูกค้าอายุ",21);
//ดำเนินการคำสั่งแบบสอบถามและส่งกลับผลลัพธ์
ผลลัพธ์รายการ = query.list();
ขั้นตอนการสืบค้น HQL:
1: รับวัตถุเซสชันไฮเบอร์เนต
2: เขียนคำสั่ง HQL
3: ใช้คำสั่ง HQL เป็นพารามิเตอร์เพื่อเรียกเมธอด createQuery ของ Session เพื่อสร้างวัตถุแบบสอบถาม
4: หากคำสั่ง HQL มีพารามิเตอร์ ให้เรียกใช้เมธอด setXXX() ของ Query เพื่อกำหนดค่าให้กับพารามิเตอร์
5: เรียกรายการและวิธีการอื่นของวัตถุ Query เพื่อสำรวจผลลัพธ์ของแบบสอบถาม
แบบสอบถามยังมีสองวิธี:
setFirstResult(int firstResult): ตั้งค่าบันทึกที่ชุดผลลัพธ์ที่ส่งคืนเริ่มต้น
setMaxResults(int maxResults): กำหนดจำนวนผลลัพธ์ที่ส่งคืนโดยแบบสอบถามนี้
การลบและอัปเดตเอนทิตี
แบบสอบถามการฉายภาพ: สืบค้นเฉพาะส่วนของแอตทริบิวต์เท่านั้น
การสืบค้นแอตทริบิวต์จะส่งกลับสตริง
การสืบค้นสองฟิลด์จะส่งกลับอาร์เรย์
แบบสอบถามที่สร้างขึ้นแบบไดนามิก: ส่วนใหญ่ใช้สำหรับแบบสอบถามตารางหลายสิบรายการ
หากต้องการสร้างวัตถุใหม่ ให้เพิ่มตัวสร้าง
เมื่อสร้างวัตถุใหม่ ให้เพิ่มชื่อแพ็คเกจ
อย่าใช้การนับ (*) ใช้การนับ (วัตถุถาวร)
การจัดกลุ่มและการเรียงลำดับ:
การเรียงลำดับตามข้อสามารถเรียงลำดับตามคีย์เวิร์ด asc หรือ desc
ตัวอย่างเช่น แบบฟอร์ม User u Order โดย u.name asc,u.age desc;
จัดกลุ่มตามข้อและแบบสอบถามทางสถิติ:
ตัวอย่างเช่น: String hql = "select count(u),u.age from User u group by u.age have count(u)>10";
รายการ รายการ = session.createQuery(hql).list();
ฟังก์ชันการรวม SQL มาตรฐานสามารถใช้ได้ในคำสั่ง HQL เช่น count(), sum(), max(), min(), age() เป็นต้น
แบบสอบถามการเชื่อมต่อ:
เข้าร่วมภายใน: เข้าร่วมภายใน
การรวมภายนอกด้านซ้าย: การรวมภายนอกด้านซ้าย
การรวมภายนอกด้านขวา: การรวมภายนอกด้านขวา
การเข้าร่วมแบบเต็ม: การเข้าร่วมแบบเต็ม (ไม่ได้ใช้กันทั่วไป)
การรวมภายนอกแบบเร่งด่วน: ดึงการรวมภายนอกด้านซ้าย, การรวมด้านซ้าย
fetch: ใช้เพื่อรับข้อมูลการเชื่อมต่อในคราวเดียว โดยเฉพาะข้อมูลที่เก็บรวบรวม ลดจำนวนการโต้ตอบกับฐานข้อมูล
รวมซ้าย: ใช้การรวมภายนอกเพื่อดำเนินการรวมภายนอก บันทึกทั้งหมดในตารางด้านซ้ายและข้อมูลบันทึกที่เกี่ยวข้องของคลาสการสั่งซื้อจะปรากฏขึ้น
Right out join: ตรงกันข้ามกับ left out join โดย Right out join จะส่งกลับเรกคอร์ดทั้งหมดในตารางด้านขวาของ HQL และข้อมูลเรกคอร์ดออบเจ็กต์ของลูกค้าที่เกี่ยวข้อง
สี่วิธีในการรับข้อมูลการรวบรวม:
1:Hibernate.initialize(user.getOrder());
2:user.getOrder().ขนาด();
3: การเชื่อมต่อเร่งด่วนด้านซ้ายและขวา
4: ตัวกรองขั้นสูง
การสืบค้นตามเกณฑ์: ใช้ออบเจ็กต์เพื่อดำเนินการสืบค้นออบเจ็กต์
อินเทอร์เฟซหลัก ได้แก่: คลาส Criteria, Criterion, expression_r และ Restrictions ความสามารถในการรองรับการสร้างคำสั่ง SQL แบบไดนามิกในขณะรันไทม์
ขั้นตอนการสืบค้นแบบมีเงื่อนไข:
1: สร้างออบเจ็กต์ Criteria ผ่านเมธอด CreateCriteria() ของ seesion
2: ตั้งค่าวัตถุแบบสอบถาม ชื่อหมายถึงคุณลักษณะของวัตถุ
3: เพิ่มเงื่อนไขการสืบค้นให้กับออบเจ็กต์ Criteria
4: ดำเนินการค้นหา list() เพื่อส่งคืนผลลัพธ์
การสืบค้นแบบมีเงื่อนไขจะเสร็จสมบูรณ์ผ่านสามคลาส:
เกณฑ์: แสดงถึงแบบสอบถาม
เกณฑ์: แสดงถึงเงื่อนไขการสืบค้น
ข้อจำกัด: คลาสเครื่องมือสำหรับสร้างเงื่อนไขการสืบค้น
บทความนี้มาจากบล็อก CSDN โปรดระบุแหล่งที่มาเมื่อพิมพ์ซ้ำ: http://blog.csdn.net/jzaccp_xiaoxiong/archive/2009/12/31/5111135.aspx