Bekerja dengan Halaman: LIMIT dan OFFSET

Selalunya, data daripada pangkalan data diambil dalam "halaman". Kerana itulah caranya mudah untuk bekerja dengan senarai besar. Kami mula-mula menanyakan baris 1 hingga 20, kemudian 21 hingga 40, dan seterusnya.

Ini adalah situasi biasa yang SQL mempunyai pengendali khas untuk LIMIT dan OFFSET ini.

Analog pengendali ini juga terdapat dalam Hibernate. Hanya mereka segera memutuskan untuk membuatnya dalam bentuk kaedah berasingan:

  • setFirstResult() adalah serupa dengan OFFSET .
  • setMaxResults() adalah serupa dengan LIMIT .

Menulis pertanyaan menggunakan kaedah ini sangat mudah. Mari tulis pertanyaan di mana kami meminta untuk mengembalikan 20 tugasan bermula dari 41. Beginilah rupanya:

Query<EmployeeTask> query = session.createQuery( “from EmployeeTask, EmployeeTask.class);
query.setFirstResult(41);
query.setMaxResults(20);
List<EmployeeTask> resultLIst = query.list();

Isih hasil

Kami mengetahui cara untuk mendapatkan sebahagian daripada rentetan hasil pertanyaan. Isu mendesak seterusnya ialah pengisihan.

Isih dalam Hibernate ditulis terus dalam pertanyaan HQL dan kelihatan seperti dijangka:

from Employee order by joinDate

Jika anda ingin menukar susunan isihan, maka anda perlu menggunakan perkataan biasa: asc dan desc. Contoh:

from Employee order by joinDate desc

Sama seperti dalam SQL, anda boleh mengisih mengikut berbilang medan:

from Employee order by joinDate desc, name asc

Di samping itu, medan isihan boleh diluluskan 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();

Berfungsi dalam HQL

Sama seperti dalam SQL dalam HQL, anda boleh menggunakan pelbagai fungsi.

Berikut ialah senarai fungsi agregat yang disokong oleh HQL:

Fungsi agregat Penerangan
kira() Mengembalikan bilangan baris
jumlah() Mengira jumlah nilai
min() Mengembalikan nilai minimum
maks() Mengembalikan nilai maksimum
purata() Mengembalikan min

Seperti yang anda harap ingat, fungsi agregat ialah fungsi yang boleh digunakan bersama dengan kumpulan oleh. Group By berfungsi sama seperti dalam SQL, jadi kami tidak akan mengulangi diri kami sendiri.

Dan, sudah tentu, fungsi biasa . Dengan fungsi biasa, semuanya lebih mudah - ia dilakukan oleh pelayan SQL, Hibernate hanya perlu menjana pertanyaan dengan betul menggunakannya.

Oleh itu, Hibernate menyokong semua ciri yang disokong SQL Server. Dan jenis pelayan SQL ditetapkan oleh parameter sqlDialect apabila anda mengkonfigurasi SessionFactory anda.

Mari cari bilangan tugasan 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();