แบบสอบถามที่มีชื่อคืออะไร?
ไฮเบอร์เนตช่วยให้คุณสามารถกำหนดคำสั่งการสืบค้นในรูปแบบของสตริงในไฟล์การแมป วิธีการสืบค้นนี้เรียกว่าการสืบค้นที่มีชื่อ
ประโยชน์ของการใช้คิวรีที่มีชื่อมีอะไรบ้าง
เนื่องจากการใช้ HQL ของ Hibernate มักต้องมีการเขียนคำสั่งสตริงในโค้ด Java ดังนั้น HQL จึงถูกผสมระหว่างโค้ด ซึ่งทำลายความสามารถในการอ่านโค้ด คุณสามารถแยกตรรกะทางธุรกิจและคำสั่งการสืบค้นได้ ซึ่งจะทำให้คุณสามารถมุ่งเน้นไปที่การสืบค้นได้ รหัส SQL หรือ HQL กระจัดกระจายทั่วทั้งแอปพลิเคชัน
การสืบค้นที่มีชื่อสามารถใช้เพื่อประมวลผลการสืบค้นที่ซับซ้อนได้
จะใช้แบบสอบถามที่มีชื่อได้อย่างไร?
แนะนำวิธีการดังต่อไปนี้:
วิธีที่ 1: ประกาศคำสั่งแบบสอบถามภายใต้แท็ก <class/> ในไฟล์การกำหนดค่า
คัดลอกรหัสรหัส ดังต่อไปนี้:
<การทำแผนที่จำศีล>
<ชื่อคลาส = "com.test.bean.Student" table = "นักเรียน" แคตตาล็อก = "ผู้ใช้">
<id name="id" type="integer">
<ชื่อคอลัมน์ = "id" />
<เครื่องกำเนิดไฟฟ้า />
</ รหัส>
<ชื่อคุณสมบัติ="ชื่อ" ประเภท="สตริง">
<ชื่อคอลัมน์ = "ชื่อ" ความยาว = "11" />
</คุณสมบัติ>
<ชื่อคุณสมบัติ="อายุ" type="จำนวนเต็ม">
<ชื่อคอลัมน์ = "อายุ" />
</คุณสมบัติ>
<ชื่อทรัพย์สิน = "เพศ" ประเภท = "สตริง">
<ชื่อคอลัมน์ = "เพศ" ความยาว = "2" />
</คุณสมบัติ>
</คลาส>
<!-- กำหนดคำสั่งแบบสอบถาม-->
<query name="findStudentByName">
<![CDATA[จากนักเรียนโดยที่ name = :name]]>
</สอบถาม>
</การทำแผนที่จำศีล>
หมายเหตุ : <![CDATA[ ]]> หมายความว่าอย่างไร
ระบุว่าเป็นข้อความธรรมดา หากไม่มีสิ่งนี้ อักขระ < > & จะไม่สามารถจัดเก็บโดยตรงใน XML และจำเป็นต้องหลีกทาง อย่างไรก็ตาม ด้วยแท็กนี้ สัญลักษณ์เหล่านี้สามารถจัดเก็บไว้ในเอกสาร XML โดยไม่ต้อง Escape วิธีนี้สามารถหลีกเลี่ยงสัญลักษณ์พิเศษที่ไม่คาดคิดซึ่งทำให้เกิดข้อผิดพลาดในการแยกวิเคราะห์ XML
คัดลอกรหัสรหัส ดังต่อไปนี้:
รายการสาธารณะ <นักเรียน> แบบสอบถาม () {
เซสชันเซสชัน = HibernateSessionFactory.getSession();
แบบสอบถาม q = session.getNamedQuery("findStudentByName");
q.setString("ชื่อ", "จางซาน");
รายการ<นักเรียน> รายการ = q.list();
รายการส่งคืน;
-
วิธีที่ 2 : คุณยังสามารถประกาศคำสั่งการสืบค้นในแท็ก <class/> ในไฟล์กำหนดค่าได้ แต่คุณต้องระบุเมื่อเรียกใช้โค้ด Java (แพ็คเกจ + คลาส + ชื่อการกำหนดค่า)
คัดลอกรหัสรหัส ดังต่อไปนี้:
<การทำแผนที่จำศีล>
<ชื่อคลาส = "com.test.bean.Student" table = "นักเรียน" แคตตาล็อก = "ผู้ใช้">
<id name="id" type="integer">
<ชื่อคอลัมน์ = "id" />
<เครื่องกำเนิดไฟฟ้า />
</ รหัส>
<ชื่อคุณสมบัติ="ชื่อ" ประเภท="สตริง">
<ชื่อคอลัมน์ = "ชื่อ" ความยาว = "11" />
</คุณสมบัติ>
<ชื่อคุณสมบัติ="อายุ" type="จำนวนเต็ม">
<ชื่อคอลัมน์ = "อายุ" />
</คุณสมบัติ>
<ชื่อทรัพย์สิน = "เพศ" ประเภท = "สตริง">
<ชื่อคอลัมน์ = "เพศ" ความยาว = "2" />
</คุณสมบัติ>
<!-- กำหนดคำสั่งแบบสอบถาม-->
<query name="findStudentByName">
<![CDATA[จากนักเรียนโดยที่ name = :name]]>
</สอบถาม>
</คลาส>
</การทำแผนที่จำศีล>
รายการสาธารณะ <นักเรียน> แบบสอบถาม () {
เซสชันเซสชัน = HibernateSessionFactory.getSession();
แบบสอบถาม q = session.getNamedQuery("com.test.bean.Student.findStudentByName");
q.setString("ชื่อ", "จางซาน");
รายการ<นักเรียน> รายการ = q.list();
รายการส่งคืน;
-
วิธีที่สาม : ใช้แบบสอบถาม sql ดั้งเดิม <sql-query> ในวิธีนี้ จะต้องเขียนคอลัมน์ทั้งหมดของตาราง ไม่เช่นนั้นจะเกิดข้อผิดพลาด 'ชื่อคอลัมน์ที่ไม่ถูกต้อง' เว้นแต่คุณจะใช้ return-scalar เพื่อตั้งค่าประเภทฟิลด์
คัดลอกรหัสรหัส ดังต่อไปนี้:
<การทำแผนที่จำศีล>
<ชื่อคลาส = "com.test.bean.Student" table = "นักเรียน" แคตตาล็อก = "ผู้ใช้">
<id name="id" type="integer">
<ชื่อคอลัมน์ = "id" />
<เครื่องกำเนิดไฟฟ้า />
</ รหัส>
<ชื่อคุณสมบัติ="ชื่อ" ประเภท="สตริง">
<ชื่อคอลัมน์ = "ชื่อ" ความยาว = "11" />
</คุณสมบัติ>
<ชื่อคุณสมบัติ="อายุ" type="จำนวนเต็ม">
<ชื่อคอลัมน์ = "อายุ" />
</คุณสมบัติ>
<ชื่อทรัพย์สิน = "เพศ" ประเภท = "สตริง">
<ชื่อคอลัมน์ = "เพศ" ความยาว = "2" />
</คุณสมบัติ>
</คลาส>
<!-- กำหนดคำสั่งแบบสอบถาม-->
<ชื่อ sql-query = "findStudentByName">
<ส่งคืนนามแฝง = "s">
</กลับมา>
<![CDATA[select {s.*} จากนักเรียน โดยที่ s.name = :name]]>
</sql-แบบสอบถาม>
</การทำแผนที่จำศีล>
หมายเหตุ : คุณยังสามารถใช้แท็ก <return-property/> ภายในแท็ก <return/> เพื่อแสดงรายการฟิลด์ทั้งหมดของตาราง เช่นเดียวกับวิธีที่อธิบายไว้ข้างต้น คอลัมน์ทั้งหมดจะถูกสอบถาม
คัดลอกรหัสรหัส ดังต่อไปนี้:
รายการสาธารณะ <นักเรียน> แบบสอบถาม () {
เซสชันเซสชัน = HibernateSessionFactory.getSession();
แบบสอบถาม q = session.getNamedQuery("findStudentByName");
q.setString("ชื่อ", "จางซาน");
รายการ<นักเรียน> รายการ = q.list();
รายการส่งคืน;
-
วิธีที่ 4 : ใช้แบบสอบถาม sql ดั้งเดิม <sql-query> หากคุณใช้ return-scalar เพื่อตั้งค่าประเภทฟิลด์ คุณสามารถสอบถามบางฟิลด์ได้
คัดลอกรหัสรหัส ดังต่อไปนี้:
<การทำแผนที่จำศีล>
<ชื่อคลาส = "com.test.bean.Student" table = "นักเรียน" แคตตาล็อก = "ผู้ใช้">
<id name="id" type="integer">
<ชื่อคอลัมน์ = "id" />
<เครื่องกำเนิดไฟฟ้า />
</ รหัส>
<ชื่อคุณสมบัติ="ชื่อ" ประเภท="สตริง">
<ชื่อคอลัมน์ = "ชื่อ" ความยาว = "11" />
</คุณสมบัติ>
<ชื่อคุณสมบัติ="อายุ" type="จำนวนเต็ม">
<ชื่อคอลัมน์ = "อายุ" />
</คุณสมบัติ>
<ชื่อทรัพย์สิน = "เพศ" ประเภท = "สตริง">
<ชื่อคอลัมน์ = "เพศ" ความยาว = "2" />
</คุณสมบัติ>
</คลาส>
<!-- กำหนดคำสั่งแบบสอบถาม-->
<ชื่อ sql-query = "findStudentByName">
<return-scalar column = "ชื่อ" type = "string"/>
<return-scalar column="age" type="integer"/>
<![CDATA[select s.name , s.age จากนักเรียน s โดยที่ s.name = :name]]>
</sql-แบบสอบถาม>
</การทำแผนที่จำศีล>
รายการสาธารณะ <Object[]> แบบสอบถาม () {
เซสชันเซสชัน = HibernateSessionFactory.getSession();
แบบสอบถามแบบสอบถาม = session.getNamedQuery("findStudentByName");
query.setString("ชื่อ", "จางซาน");
รายการ<วัตถุ[]> รายการ = query.list();
รายการส่งคืน;
-
หรือ :
คัดลอกรหัสรหัส ดังต่อไปนี้:
รายการสาธารณะ <นักเรียน> แบบสอบถาม () {
เซสชันเซสชัน = HibernateSessionFactory.getSession();
แบบสอบถาม q = session.getNamedQuery("findStudentByName")
setResultTransformer (Transformers.aliasToBean (Student.class));
q.setString("ชื่อ", "จางซาน");
รายการ<นักเรียน> รายการ = q.list();
รายการส่งคืน;
-