JavaRush /Kurslar /All lectures for UZ purposes /So'rov uzunligini cheklash

So'rov uzunligini cheklash

All lectures for UZ purposes
Daraja, Dars
Mavjud

Sahifalar bilan ishlash: LIMIT va OFFSET

Ko'p hollarda ma'lumotlar bazasidan ma'lumotlar "sahifalar" shaklida chiqariladi. Bu katta ro'yxatlar bilan ishlashda qulay. Avval 1-dan 20-gacha satrlarni so'raymiz, keyin 21-dan 40-gacha va boshqalar.

Bu shunchalik keng tarqalgan holatki, SQL'da LIMIT va OFFSET maxsus operatorlari paydo bo'ldi.

Bu operatorlarning analoglari Hibernate'da ham mavjud. Faqat ular darhol alohida metodlar shaklida qilindi:

  • setFirstResult() – OFFSET analogi.
  • setMaxResults() – LIMIT analogi.

Bu metodlardan foydalangan holda so'rovlarni yozish juda oson. Keling, 41-dan boshlab 20 ta vazifani qaytarishni so'rovchi so'rov yozamiz. Bu qanday ko'rinishga ega bo'ladi:


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

Natijalarni saralash

Biz so'rov natijasini qanday qismida olishni tushundik. Keyingi dolzarb savol – saralash.

Hibernate'da saralash HQL-so'rovda to'g'ridan-to'g'ri yoziladi va umuman kutganingizdek ko'rinadi:


from Employee order by joinDate

Agar siz saralash tartibini o'zgartirmoqchi bo'lsangiz, tanish so'zlarni ishlatishingiz kerak: asc va desc. Misol:


from Employee order by joinDate desc

Xuddi SQL'da bo'lgani kabi, siz bir nechta maydonlarga ko'ra saralash qilishingiz mumkin:


from Employee order by joinDate desc, name asc

Bundan tashqari, saralash uchun maydonni parametr sifatida uzatishingiz mumkin:


           	String hql = "from EmployeeTask where employee.name = :username order by :ord";
           	Query<EmployeeTask> query = session.createQuery( hql, EmployeeTask.class);
           	query.setParameter(“username”, “Иван Иванович”);
           	query.setParameter(“ord”, “name”);
 
           	List<EmployeeTask> resultLIst = query.list();

HQL'dagi funksiyalar

Xuddi SQL'da bo'lgani kabi HQL'da ham turli xil funksiyalarni ishlatishingiz mumkin.

Mana HQLni qo'llab-quvvatlaydigan agregat funksiyalarining ro'yxati:

Agregat funksiyalari Tavsifi
count() Qatorlar sonini qaytaradi
sum() Qiymatlar yig'indisini hisoblaydi
min() Minimal qiymatni qaytaradi
max() Maksimal qiymatni qaytaradi
avg() O'rtacha qiymatni qaytaradi

Umid qilamanki, yodda tutyapsiz, agregat funksiyalar – bu group by bilan ishlatish mumkin bo'lgan funksiyalar. Group By SQL'da qanday ishlasa, xuddi shunday ishlaydi, shuning uchun takrorlanmaymiz.

Va, albatta, oddiy funksiyalar. Oddiy funksiyalar bilan hammasi ancha oson – ularni SQL-server bajaradi, Hibernate’ga faqat to'g'ri so'rovni ularni ishlatib yaratish kerak.

Shuning uchun Hibernate SQL-server tomonidan qo'llab-quvvatlanadigan barcha funksiyalarni qo'llab-quvvatlaydi. SQL-server turi esa SessionFactory ni sozlash chog'ida sqlDialect parametri orqali belgilanadi.

Keling, bir foydalanuvchiga belgilangan vazifalar sonini topamiz:


           	String hql = "select count(*) from EmployeeTask where employee.name = :username ";
           	Query<Integer> query = session.createQuery( hql, Integer.class);
           	query.setParameter(“username”, “Иван Иванович”);
           	Integer count = query.uniqueResult();
Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION