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();
GO TO FULL VERSION