Nggarap Kaca: LIMIT lan OFFSET

Asring banget, data saka database dijupuk ing "kaca". Amarga kaya ngono iku trep kanggo nggarap dhaptar gedhe. Pisanan kita takon baris 1 nganti 20, banjur 21 nganti 40, lan sateruse.

Iki minangka kahanan umum sing SQL duwe operator khusus kanggo LIMIT lan OFFSET iki.

Analog saka operator kasebut uga ana ing Hibernate. Mung dheweke langsung mutusake nggawe kanthi cara sing kapisah:

  • setFirstResult() iku analog kanggo OFFSET .
  • setMaxResults () analog karo LIMIT .

Nulis pitakon nggunakake metode kasebut gampang banget. Ayo nulis pitakon sing njaluk bali 20 tugas wiwit saka 41. Iki bakal katon kaya:

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

Hasil urut

We figured metu carane njaluk bagéan saka asil strings saka pitakonan. Jeksa Agung bisa ngetokake sabanjure ngurutake.

Ngurutake ing Hibernate ditulis langsung ing query HQL lan katon umume samesthine:

from Employee order by joinDate

Yen sampeyan pengin ngganti urutan urut, sampeyan kudu nggunakake tembung sing akrab: asc lan desc. Tuladha:

from Employee order by joinDate desc

Kaya ing SQL, sampeyan bisa ngurutake sawetara kolom:

from Employee order by joinDate desc, name asc

Kajaba iku, kolom urut bisa dilewati minangka 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 ing HQL

Kaya ing SQL ing HQL, sampeyan bisa nggunakake macem-macem fungsi.

Ing ngisor iki dhaptar fungsi agregat sing didhukung HQL:

Fungsi agregat Katrangan
ngitung() Ngasilake nomer larik
cacahe() Ngetung jumlah nilai
min() Ngasilake nilai minimal
maks() Ngasilake nilai maksimum
rata-rata () Mulihake tegese

Sing muga-muga sampeyan elinga, fungsi agregat yaiku sing bisa digunakake bebarengan karo grup dening. Group By dianggo persis padha ing SQL, supaya kita ora bakal mbaleni dhéwé.

Lan, mesthi, fungsi biasa . Kanthi fungsi biasa, kabeh luwih gampang - ditindakake dening server SQL, Hibernate mung kudu ngasilake pitakon kanthi bener.

Mulane, Hibernate ndhukung kabeh fitur sing SQL Server ndhukung. Lan jinis server SQL disetel dening parameter sqlDialect nalika sampeyan ngatur SessionFactory.

Ayo goleki jumlah tugas sing ditugasake kanggo pangguna:

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