Paggawa gamit ang Mga Pahina: LIMIT at OFFSET

Kadalasan, ang data mula sa isang database ay kinukuha sa "mga pahina". Dahil iyan ay maginhawa upang gumana sa malalaking listahan. Una naming i-query ang mga row 1 hanggang 20, pagkatapos ay 21 hanggang 40, at iba pa.

Ito ay isang pangkaraniwang sitwasyon na ang SQL ay may mga espesyal na operator para sa LIMIT at OFFSET na ito.

Ang mga analog ng mga operator na ito ay naroroon din sa Hibernate. Tanging agad silang nagpasya na gawin ang mga ito sa anyo ng magkahiwalay na mga pamamaraan:

  • setFirstResult() ay kahalintulad sa OFFSET .
  • Ang setMaxResults() ay kahalintulad sa LIMIT .

Ang pagsulat ng mga query gamit ang mga paraang ito ay napakadali. Sumulat tayo ng query kung saan hinihiling nating ibalik ang 20 gawain simula sa 41. Ganito ang magiging hitsura nito:

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

Pagbukud-bukurin ang mga resulta

Naisip namin kung paano makakuha ng bahagi ng mga string ng resulta ng isang query. Ang susunod na pagpindot sa isyu ay pag-uuri.

Ang pag-uuri sa Hibernate ay direktang nakasulat sa query ng HQL at mukhang karaniwang inaasahan:

from Employee order by joinDate

Kung gusto mong baguhin ang pagkakasunud-sunod ng pag-uuri, kailangan mong gumamit ng mga pamilyar na salita: asc at desc. Halimbawa:

from Employee order by joinDate desc

Katulad ng sa SQL, maaari kang mag-uri-uri ayon sa maraming field:

from Employee order by joinDate desc, name asc

Bilang karagdagan, ang field ng pag-uuri ay maaaring maipasa bilang isang 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();

Mga function sa HQL

Tulad ng sa SQL sa HQL, maaari mong gamitin ang iba't ibang mga function.

Narito ang isang listahan ng mga pinagsama-samang function na sinusuportahan ng HQL:

Pinagsama-samang mga function Paglalarawan
bilangin() Ibinabalik ang bilang ng mga hilera
kabuuan() Kinakalkula ang kabuuan ng mga halaga
min() Ibinabalik ang pinakamababang halaga
max() Ibinabalik ang maximum na halaga
avg() Ibinabalik ang ibig sabihin

Tulad ng inaasahan mong tandaan, ang pinagsama-samang mga pag-andar ay ang mga maaaring magamit kasabay ng pangkat ni. Ang Group By ay gumagana nang eksakto katulad ng sa SQL, kaya hindi na namin uulitin ang aming sarili.

At, siyempre, ang karaniwang mga pag-andar . Sa mga ordinaryong pag-andar, ang lahat ay mas simple - ang mga ito ay ginagampanan ng SQL server, ang Hibernate ay kailangan lamang na gumawa ng tama ng isang query gamit ang mga ito.

Samakatuwid, sinusuportahan ng Hibernate ang lahat ng mga tampok na sinusuportahan ng SQL Server. At ang uri ng SQL server ay itinakda ng sqlDialect parameter kapag na-configure mo ang iyong SessionFactory.

Hanapin natin ang bilang ng mga gawaing itinalaga sa isang user:

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