JavaRush /Курсы /All lectures for GE purposes /მოთხოვნის სიგრძის შეზღუდვა

მოთხოვნის სიგრძის შეზღუდვა

All lectures for GE purposes
1 уровень , 272 лекция
Открыта

გვერდებთან მუშაობა: LIMIT და OFFSET

ძალიან ხშირად მონაცემთა ბაზიდან მონაცემები "გვერდებით" იშლება. რადგან სწორედ ასეა მოხერხებული დიდი სიებით მუშაობა. ჯერ მოვითხოვთ სტრიქონებს 1-დან 20-მდე, შემდეგ 21-დან 40-მდე და ასე შემდეგ.

ეს იმდენად გავრცელებული სიტუაციაა, რომ SQL-ში გაჩნდა სპეციალური ოპერატორები LIMIT და OFFSET.

ამ ოპერატორების ანალოგები არის Hibernate-შიც. ისინი მაშინვე გადაწყვიტეს ცალკე მეთოდების სახით გაეკეთებინათ:

  • setFirstResult() – ანალოგი OFFSET-ის.
  • setMaxResults() – ანალოგი LIMIT-ის.

ამ მეთოდების გამოყენებით მოთხოვნების დაწერა ძალიან მარტივია. მოდი დავწეროთ მოთხოვნა, სადაც ვთხოვთ 41-დან 20 დავალებას დაბრუნებას. აი, ასე გამოიყურება ეს:


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

შედეგების დალაგება

როგორ მივიღოთ მოთხოვნის შედეგების ნაწილი, გავარკვიეთ. შემდეგი გადაუდებელი საკითხია - დალაგება.

დალაგება Hibernate-ში იწერება პირდაპირ HQL-მოთხოვნაში და სრულიად მოსალოდნელად გამოიყურება:


from Employee order by joinDate

თუ გინდა დალაგების წესის შეცვლა, მაშინ უნდა გამოიყენო ნაცნობი სიტყვები: asc და desc. მაგალითი:


from Employee order by joinDate desc

ისევე, როგორც SQL-ში, შეგიძლია დალაგება რამდენიმე ველზე:


from Employee order by joinDate desc, name asc

გარდა ამისა, დალაგების ველი შეიძლება გადაეცეს როგორც პარამეტრი:


           	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-ში

ისევე, როგორც SQL-ში, HQL-ში შესაძლებელია სხვადასხვა ფუნქციების გამოყენება.

აი, აგრეგატული ფუნქციების სია, რომლებსაც HQL მხარს უჭერს:

აგრეგატული ფუნქციები აღწერა
count() აბრუნებს სტრიქონების რაოდენობას
sum() ითვლის მნიშვნელობების ჯამს
min() აბრუნებს მინიმალურ მნიშვნელობას
max() აბრუნებს მაქსიმალურ მნიშვნელობას
avg() აბრუნებს საშუალო მნიშვნელობას

როგორც წესით გახსოვს, აგრეგატული ფუნქციები, – ესენი ის ფუნქციებია, რომლებიც შეიძლება გამოიყენო group by-თან ერთად. Group By მუშაობს სრულიად ისე, როგორც SQL-ში, ამიტომ არ გავიმეორებთ.

და, რა თქმა უნდა, ჩვეულებრივი ფუნქციები. ჩვეულებრივ ფუნქციებთან ყველაფერი ბევრად მარტივია – მათი შესრულება ახორციელდება SQL-server-ის მიერ, Hibernate-ს უბრალოდ სწორად უნდა გენერირდეს მოთხოვნა მათი გამოყენებით.

ამიტომ Hibernate მხარს უჭერს ყველა იმ ფუნქციას, რომელსაც SQL-server-ი უჭერს. ხოლო SQL-server-ის ტიპი განისაზღვრება sqlDialect პარამეტრით, როდესაც კონფიგურირებ SessionFactory-ს.

მოდით ვიპოვოთ დავალებების რაოდენობა, რომლებიც მომხმარებელს აქვს მინიჭებული:


           	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();
Комментарии
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ