การทำงานกับเพจ: LIMIT และ OFFSET
บ่อยครั้งมาก ข้อมูลจากฐานข้อมูลถูกเรียกค้นใน "เพจ" เพราะนั่นเป็นวิธีที่สะดวกในการทำงานกับรายการขนาดใหญ่ เราจะค้นหาแถวที่ 1 ถึง 20 ก่อน จากนั้นจึงค้นหาแถวที่ 21 ถึง 40 ไปเรื่อยๆ
นี่เป็นสถานการณ์ทั่วไปที่ SQL มีตัวดำเนินการพิเศษสำหรับ LIMIT และ OFFSET นี้
แอนะล็อกของตัวดำเนินการเหล่านี้มีอยู่ในไฮเบอร์เนตด้วย มีเพียงพวกเขาเท่านั้นที่ตัดสินใจทำในรูปแบบของวิธีการแยกกันทันที:
- setFirstResult ()มีความคล้ายคลึงกับOFFSET
- setMaxResults()นั้นคล้ายคลึงกับ LIMIT
การเขียนแบบสอบถามด้วยวิธีเหล่านี้ทำได้ง่ายมาก ลองเขียนแบบสอบถามที่เราขอให้ส่งคืน 20 งานโดยเริ่มจาก 41 ซึ่งจะมีลักษณะดังนี้:
Query<EmployeeTask> query = session.createQuery( “from EmployeeTask”, EmployeeTask.class);
query.setFirstResult(41);
query.setMaxResults(20);
List<EmployeeTask> resultLIst = query.list();
เรียงลำดับผลลัพธ์
เราทราบวิธีรับส่วนหนึ่งของสตริงผลลัพธ์ของแบบสอบถาม ปัญหาเร่งด่วนต่อไปคือการเรียงลำดับ
การเรียงลำดับใน Hibernate เขียนโดยตรงในแบบสอบถาม HQL และมีลักษณะโดยทั่วไป:
from Employee order by joinDate
หากคุณต้องการเปลี่ยนลำดับการจัดเรียง คุณต้องใช้คำที่คุ้นเคย: asc และ desc ตัวอย่าง:
from Employee order by joinDate desc
เช่นเดียวกับใน SQL คุณสามารถจัดเรียงตามหลายฟิลด์:
from Employee order by joinDate desc, name asc
นอกจากนี้ ฟิลด์การเรียงลำดับสามารถส่งเป็นพารามิเตอร์:
String hql = "from EmployeeTask where employee.name = :username order by :ord";
Query<EmployeeTask> query = session.createQuery( hql, EmployeeTask.class);
query.setParameter(“username”, “Ivan Ivanович”);
query.setParameter(“ord”, “name”);
List<EmployeeTask> resultLIst = query.list();
ฟังก์ชั่นใน HQL
เช่นเดียวกับใน SQL ใน HQL คุณสามารถใช้ฟังก์ชันต่างๆ
นี่คือรายการของฟังก์ชันรวมที่ HQL รองรับ:
ฟังก์ชันรวม | คำอธิบาย |
---|---|
นับ() | ส่งกลับจำนวนแถว |
ผลรวม () | คำนวณผลรวมของค่า |
นาที() | ส่งกลับค่าต่ำสุด |
สูงสุด () | ส่งกลับค่าสูงสุด |
เฉลี่ย () | ส่งกลับค่าเฉลี่ย |
อย่างที่คุณหวังว่าจะจำได้ ฟังก์ชันรวมเป็นฟังก์ชันที่สามารถใช้ร่วมกับการจัดกลุ่มตาม Group By ทำงานเหมือนกับใน SQL ดังนั้นเราจะไม่ทำซ้ำ
และแน่นอนฟังก์ชั่นปกติ . ด้วยฟังก์ชันทั่วไป ทุกอย่างจะง่ายกว่ามาก - ดำเนินการโดยเซิร์ฟเวอร์ SQL ไฮเบอร์เนตจำเป็นต้องสร้างคิวรีอย่างถูกต้องโดยใช้เท่านั้น
ดังนั้น Hibernate จึงรองรับฟีเจอร์ทั้งหมดที่ SQL Server รองรับ และประเภทของเซิร์ฟเวอร์ SQL ถูกกำหนดโดยพารามิเตอร์ sqlDialect เมื่อคุณกำหนดค่า SessionFactory ของคุณ
มาหาจำนวนงานที่กำหนดให้ผู้ใช้:
String hql = "select count(*) from EmployeeTask where employee.name = :username ";
Query<Integer> query = session.createQuery( hql, Integer.class);
query.setParameter(“username”, “Ivan Ivanович”);
Integer count = query.uniqueResult();
GO TO FULL VERSION