جاوا و تکنولوژی های آن

java programming language

در این وبلاگ به بررسی نکات موجود در جاوا و تکنولوژی های آن می پردازیم

طبقه بندی موضوعی


در این مبحث خواهیم دید چگونه میتوان در JPA و Spring Data JPA تعداد نتایج دریافتی کوئری ها را محدود کنیم 




محدود کردن تعداد نتایج در Native SQL :

SELECT firstName, lastName, seatNumber FROM passengers ORDER BY seatNumber LIMIT 1;


کلاس entity زیر را فرض کنید :

@Entity
class Passenger {
 
    @Id
    @GeneratedValue
    @Column(nullable = false)
    private Long id;
 
    @Basic(optional = false)
    @Column(nullable = false)
    private String fistName;
 
    @Basic(optional = false)
    @Column(nullable = false)
    private String lastName;
 
    @Basic(optional = false)
    @Column(nullable = false)
    private int seatNumber;
 
    // constructor, getters etc.
}


حالا ما نیاز به متدی داریم که کوئری مورد نظر ما را پیاده سازی کند :


@Repository
class PassengerRepositoryImpl {
 
    @PersistenceContext
    private EntityManager entityManager;
 
    @Override
    public List<Passenger> findOrderedBySeatNumberLimitedTo(int limit) {
        return entityManager.createQuery("SELECT p FROM Passenger p ORDER BY p.seatNumber",
          Passenger.class).setMaxResults(limit).getResultList();
    }
}


متد ()setMaxResults تعداد نتایج را محدود میکنیم 

کد بالا کوئری زیر را تولید میکند :

select
  passenger0_.id as id1_15_,
  passenger0_.fist_name as fist_nam2_15_,
  passenger0_.last_name as last_nam3_15_,
  passenger0_.seat_number as seat_num4_15_
from passenger passenger0_ order by passenger0_.seat_number limit ?




استفاده از Spring Data JPA :


یکی از راه ها استفاده از کلمات کلیدی first و top است 

Passenger findFirstByOrderBySeatNumberAsc();
Passenger findTopByOrderBySeatNumberAsc();

با این متد ها اولین رکورد دریافت خواهد شد در اینجا شماره اولین صندلی اشغال شده و اولین کسی که آنرا در اختیار گرفته را بر میگرداند


بهتر است با optional استفاده شود :


Optional<Passenger> findFirstByOrderBySeatNumberAsc();
Optional<Passenger> findTopByOrderBySeatNumberAsc();


استفاده از Pageable :


Page<Passenger> page = repository.findAll(
  PageRequest.of(0, 1, Sort.by(Sort.Direction.ASC, "seatNumber")));



هر دوی این روش ها کوئری زیر را تولید میکند و بسته به اینکه با کدامیک راحت تر هستید یا برای شما قابل استفاده است میتوانید از آن بهره ببرید :


select
  passenger0_.id as id1_15_,
  passenger0_.fist_name as fist_nam2_15_,
  passenger0_.last_name as last_nam3_15_,
  passenger0_.seat_number as seat_num4_15_ 
from passenger passenger0_ order by passenger0_.seat_number asc limit ?












نظرات  (۰)

هیچ نظری هنوز ثبت نشده است

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی