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();