CrudRepository এবং JpaRepository উভয়ই Spring Data Repository লাইব্রেরির ইন্টারফেস। Spring Data Repository বয়লারপ্লেট কোড কমানোর জন্য প্রিডিফাইনড ফাইন্ডার প্রদান করে বিভিন্ন পারসিস্টেন্স লেয়ারের জন্য।
JpaRepository, CrudRepository এবং PagingAndSortingRepository এক্সটেন্ড করে। এটি CrudRepository থেকে কিছু ফাইন্ডার ইনহেরিট করে (findOne, save, delete)। এছাড়া JPA-সম্পর্কিত এক্সট্রা মেথড দেয়: বাচ ডিলিট, ডেটাবেসে সরাসরি ফ্লাশ, পেজিনেশন ও সর্টিং सम्बन्धী মেথড।
আমাদের এই রিপোজিটরি এক্সটেন্ড করতে হয় এবং তারপর সব মেথড অ্যাক্সেস করতে পারি। বিজনেস রিকোয়ারমেন্ট অনুযায়ী নেমড বা নেটিভ কোয়েরি দিয়ে নতুন মেথডও যোগ করা যায়।
JpaRepository এবং CrudRepository-এর তুলনা
| ক্রমিক নং | বিষয় | JpaRepository | CrudRepository |
|---|---|---|---|
| ১ | হায়ারার্কি | CrudRepository এবং PagingAndSortingRepository এক্সটেন্ড করে | বেস ইন্টারফেস, মার্কার ইন্টারফেস হিসেবে কাজ করে |
| ২ | বাচ সাপোর্ট | বাচ ডিলিট, সরাসরি ফ্লাশের মতো JPA-স্পেসিফিক মেথড দেয় | শুধু CRUD ফাংশন (findOne, save, ইত্যাদি) |
| ৩ | পেজিনেশন সাপোর্ট | PagingAndSortingRepository এক্সটেন্ড করে, পেজিনেশন/সর্টিং মেথড দেয় | পেজিনেশন এবং সর্টিং-এর মেথড দেয় না |
| ৪ | ইউজ কেস | রিপোজিটরি JPA টেকনোলজির সাথে টাই হয়ে যায়, এড়িয়ে চলা উচিত | CrudRepository বা PagingAndSortingRepository ব্যবহার করুন (প্রয়োজন অনুযায়ী) |
JpaRepository উদাহরণ
@Repository
public interface BookDAO extends JpaRepository<Book, Integer> {
Book findByAuthor(@Param("id") Integer id);
}
CrudRepository উদাহরণ
@Repository
public interface BookDAO extends CrudRepository<Book, Integer> {
Book findById(@Param("id") Integer id);
}
সেরা অনুশীলন
- সাধারণ CRUD-এর জন্য CrudRepository ব্যবহার করুন
- পেজিনেশন/সর্টিং দরকার হলে PagingAndSortingRepository ব্যবহার করুন
- JPA-স্পেসিফিক ফিচার (flush, batch delete) দরকার হলে JpaRepository ব্যবহার করুন
- জাভা ৮+ এ
Optionalরিটার্ন টাইপ ব্যবহার করা 베ター (findById → Optional<Book>)