CrudRepository और JPA Repository दोनों स्प्रिंग डेटा रिपॉजिटरी लाइब्रेरी के इंटरफेस हैं। स्प्रिंग डेटा रिपॉजिटरी विभिन्न पर्सिस्टेंस लेयर्स के लिए डेटा लेयर तक पहुंचने के लिए कुछ पूर्वनिर्धारित फाइंडर्स प्रदान करके बॉयलरप्लेट कोड को कम करती है।
JPA Repository, CrudRepository और PagingAndSorting Repository को एक्सटेंड करता है। यह Crud Repository से कुछ फाइंडर्स इनहेरिट करता है जैसे findOne, save, delete। यह JPA से संबंधित कुछ अतिरिक्त मेथड्स भी प्रदान करता है जैसे बैच में रिकॉर्ड डिलीट करना, डेटा को सीधे डेटाबेस में फ्लश करना और पेजिनेशन और सॉर्टिंग से संबंधित मेथड्स।
हमें अपने एप्लिकेशन में इस रिपॉजिटरी को एक्सटेंड करने की आवश्यकता होती है और फिर हम इन रिपॉजिटरीज में उपलब्ध सभी मेथड्स को एक्सेस कर सकते हैं। हम बिजनेस आवश्यकताओं के आधार पर नेम्ड या नेटिव क्वेरीज का उपयोग करके नए मेथड्स भी जोड़ सकते हैं।
| क्र.सं. | मुख्य बिंदु | JpaRepository | CrudRepository |
|---|---|---|---|
| 1 | हायरार्की | JPA, CrudRepository और PagingAndSorting Repository को एक्सटेंड करता है | Crud Repository बेस इंटरफेस है और यह मार्कर इंटरफेस के रूप में कार्य करता है |
| 2 | बैच सपोर्ट | JPA JPA से संबंधित कुछ अतिरिक्त मेथड्स भी प्रदान करता है जैसे बैच में रिकॉर्ड डिलीट करना और डेटा को सीधे डेटाबेस में फ्लश करना | यह केवल CRUD फंक्शन्स प्रदान करता है जैसे findOne, save, आदि |
| 3 | पेजिनेशन सपोर्ट | JPA Repository PagingAndSorting Repository को भी एक्सटेंड करता है। यह पेजिनेशन इम्प्लीमेंट करने के लिए उपयोगी सभी मेथड्स प्रदान करता है | Crud Repository पेजिनेशन और सॉर्टिंग इम्प्लीमेंट करने के लिए मेथड्स प्रदान नहीं करता |
| 4 | यूज केस | JpaRepository आपके रिपॉजिटरीज को 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);
}
इंटरफेस हायरार्की
Repository (मार्कर इंटरफेस)
↓
CrudRepository<T, ID> (बेसिक CRUD ऑपरेशन्स)
↓
PagingAndSortingRepository<T, ID> (पेजिनेशन और सॉर्टिंग)
↓
JpaRepository<T, ID> (JPA स्पेसिफिक: flush, batch delete, आदि)
मुख्य मेथड्स तुलना
| मेथड | CrudRepository | JpaRepository |
|---|---|---|
| save() | ✓ | ✓ |
| findById() | ✓ | ✓ |
| delete() | ✓ | ✓ |
| flush() | ✗ | ✓ |
| saveAndFlush() | ✗ | ✓ |
| deleteInBatch() | ✗ | ✓ |
| findAll(Pageable) | ✗ | ✓ |
| findAll(Sort) | ✗ | ✓ |
बेस्ट प्रैक्टिस
सबसे विशिष्ट इंटरफेस चुनें जो आपकी आवश्यकताओं को पूरा करता हो। यदि केवल बेसिक CRUD चाहिए तो CrudRepository, यदि पेजिनेशन/सॉर्टिंग चाहिए तो PagingAndSortingRepository, यदि JPA-स्पेसिफिक फीचर्स चाहिए तो JpaRepository।