Sayfalarla Çalışma: LIMIT ve OFSET

Çoğu zaman, bir veritabanındaki veriler "sayfalar" halinde alınır. Çünkü büyük listelerle çalışmak bu şekilde uygundur. Önce 1'den 20'ye kadar olan satırları, ardından 21'den 40'a kadar olan satırları sorgularız, vb.

Bu o kadar yaygın bir durumdur ki, SQL'in bu LIMIT ve OFFSET için özel operatörleri vardır.

Bu işleçlerin benzerleri de Hazırda Bekletme modunda bulunur. Sadece hemen ayrı yöntemler şeklinde yapmaya karar verdiler:

  • setFirstResult(), OFFSET'e benzer .
  • setMaxResults() , LIMIT ile benzerdir .

Bu yöntemleri kullanarak sorgu yazmak çok kolaydır. 41'den başlayarak 20 görev döndürmek istediğimiz bir sorgu yazalım. Şöyle görünecek:

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

Sonuçları sırala

Bir sorgunun sonuç dizelerinin bir bölümünü nasıl alacağımızı bulduk. Bir sonraki acil konu sıralamadır.

Hazırda Bekletme modunda sıralama, doğrudan HQL sorgusunda yazılır ve genel olarak beklenen bir görünüme sahiptir:

from Employee order by joinDate

Sıralama düzenini değiştirmek istiyorsanız, tanıdık kelimeleri kullanmanız gerekir: artan ve azalan. Örnek:

from Employee order by joinDate desc

Tıpkı SQL'de olduğu gibi, birden çok alana göre sıralayabilirsiniz:

from Employee order by joinDate desc, name asc

Ek olarak, sıralama alanı bir parametre olarak iletilebilir:

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

HQL'deki işlevler

Tıpkı HQL'deki SQL'de olduğu gibi, çeşitli işlevleri kullanabilirsiniz.

HQL'nin desteklediği toplu işlevlerin listesi aşağıdadır :

Toplu işlevler Tanım
saymak() Satır sayısını döndürür
toplam() Değerlerin toplamını hesaplar
dk() Minimum değeri döndürür
maks() Maksimum değeri döndürür
ortalama () Ortalamayı döndürür

Umarım hatırlarsınız, toplama işlevleri, group by ile birlikte kullanılabilen işlevlerdir. Group By, SQL'deki ile tamamen aynı şekilde çalışır, bu nedenle kendimizi tekrar etmeyeceğiz.

Ve tabii ki olağan işlevler . Sıradan işlevlerle, her şey çok daha basittir - bunlar SQL sunucusu tarafından gerçekleştirilir, Hazırda Bekletme'nin yalnızca bunları kullanarak doğru bir şekilde bir sorgu oluşturması gerekir.

Bu nedenle Hibernate, SQL Server'ın desteklediği tüm özellikleri destekler. Ve SQL sunucusunun türü, SessionFactory'nizi yapılandırdığınızda sqlDialect parametresi tarafından belirlenir.

Bir kullanıcıya atanan görev sayısını bulalım:

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