Bekerja dengan Halaman: LIMIT dan OFFSET
Sangat sering, data dari database diambil di “halaman”. Karena begitulah nyaman bekerja dengan daftar besar. Kami pertama-tama meminta baris 1 hingga 20, lalu 21 hingga 40, dan seterusnya.
Ini adalah situasi yang umum sehingga SQL memiliki operator khusus untuk LIMIT dan OFFSET ini.
Analog dari operator ini juga hadir di Hibernate. Hanya mereka yang segera memutuskan untuk membuatnya dalam bentuk metode terpisah:
- setFirstResult() analog dengan OFFSET .
- setMaxResults() analog dengan LIMIT .
Menulis kueri menggunakan metode ini sangat mudah. Mari tulis kueri di mana kami meminta untuk mengembalikan 20 tugas mulai dari 41. Ini akan terlihat seperti ini:
Query<EmployeeTask> query = session.createQuery( “from EmployeeTask”, EmployeeTask.class);
query.setFirstResult(41);
query.setMaxResults(20);
List<EmployeeTask> resultLIst = query.list();
Sortir hasil
Kami menemukan cara mendapatkan bagian dari rangkaian hasil kueri. Masalah mendesak berikutnya adalah penyortiran.
Penyortiran dalam Hibernasi ditulis langsung dalam kueri HQL dan secara umum diharapkan:
from Employee order by joinDate
Jika Anda ingin mengubah tata urutan, maka Anda perlu menggunakan kata-kata yang sudah dikenal: asc dan desc. Contoh:
from Employee order by joinDate desc
Sama seperti di SQL, Anda dapat mengurutkan berdasarkan beberapa kolom:
from Employee order by joinDate desc, name asc
Selain itu, bidang pengurutan dapat diteruskan sebagai parameter:
String hql = "from EmployeeTask where employee.name = :username order by :ord";
Query<EmployeeTask> query = session.createQuery( hql, EmployeeTask.class);
query.setParameter(“username”, “Ivan Ivanovich”);
query.setParameter(“ord”, “name”);
List<EmployeeTask> resultLIst = query.list();
Fungsi di HQL
Sama seperti di SQL di HQL, Anda dapat menggunakan berbagai fungsi.
Berikut adalah daftar fungsi agregat yang didukung oleh HQL:
Fungsi agregat | Keterangan |
---|---|
menghitung() | Mengembalikan jumlah baris |
jumlah() | Menghitung jumlah nilai |
menit() | Mengembalikan nilai minimum |
maks() | Mengembalikan nilai maksimum |
rata-rata() | Mengembalikan rata-rata |
Seperti yang mudah-mudahan Anda ingat, fungsi agregat adalah fungsi yang dapat digunakan bersamaan dengan group by. Group By bekerja persis sama seperti di SQL, jadi kami tidak akan mengulanginya sendiri.
Dan, tentu saja, fungsi biasa . Dengan fungsi biasa, semuanya jauh lebih sederhana - mereka dilakukan oleh server SQL, Hibernasi hanya perlu membuat kueri dengan benar menggunakannya.
Oleh karena itu, Hibernate mendukung semua fitur yang didukung oleh SQL Server. Dan jenis server SQL diatur oleh parameter sqlDialect saat Anda mengonfigurasi SessionFactory Anda.
Mari temukan jumlah tugas yang diberikan kepada pengguna:
String hql = "select count(*) from EmployeeTask where employee.name = :username ";
Query<Integer> query = session.createQuery( hql, Integer.class);
query.setParameter(“username”, “Ivan Ivanovich”);
Integer count = query.uniqueResult();
GO TO FULL VERSION