"सुविधाजनक" और "उपयोग करने में शक्तिशाली" कुछ हद तक लक्ष्यों का खंडन कर रहे हैं। टेम्पलेट्स की तुलना में रिपॉजिटरी कहीं अधिक सुविधाजनक हैं, लेकिन निश्चित रूप से बाद वाले आपको निष्पादित करने के लिए अधिक बढ़िया नियंत्रण देते हैं।
चूंकि रिपोजिटरी प्रोग्रामिंग मॉडल कई स्प्रिंग डेटा मॉड्यूल के लिए उपलब्ध है, इसलिए आपको स्प्रिंग डेटा मोंगोडीबी संदर्भ डॉक्स के सामान्य खंड में इसके लिए अधिक गहन दस्तावेज मिलेंगे।
TL;DR
हम आम तौर पर निम्नलिखित दृष्टिकोण की अनुशंसा करते हैं:
- रिपॉजिटरी सार से शुरू करें और क्वेरी व्युत्पत्ति तंत्र या मैन्युअल रूप से परिभाषित प्रश्नों का उपयोग करके सरल प्रश्नों की घोषणा करें।
- अधिक जटिल प्रश्नों के लिए, मैन्युअल रूप से कार्यान्वित विधियों को रिपॉजिटरी में जोड़ें (जैसा कि यहां प्रलेखित है)। कार्यान्वयन के लिए
MongoTemplate
. का उपयोग करें ।
विवरण
आपके उदाहरण के लिए यह कुछ इस तरह दिखाई देगा:
-
अपने कस्टम कोड के लिए एक इंटरफ़ेस परिभाषित करें:
interface CustomUserRepository { List<User> yourCustomMethod(); }
-
इस वर्ग के लिए एक कार्यान्वयन जोड़ें और यह सुनिश्चित करने के लिए नामकरण परंपरा का पालन करें कि हम कक्षा ढूंढ सकते हैं।
class UserRepositoryImpl implements CustomUserRepository { private final MongoOperations operations; @Autowired public UserRepositoryImpl(MongoOperations operations) { Assert.notNull(operations, "MongoOperations must not be null!"); this.operations = operations; } public List<User> yourCustomMethod() { // custom implementation here } }
-
अब अपने बेस रिपॉजिटरी इंटरफ़ेस को कस्टम एक का विस्तार करने दें और इन्फ्रास्ट्रक्चर स्वचालित रूप से आपके कस्टम कार्यान्वयन का उपयोग करेगा:
interface UserRepository extends CrudRepository<User, Long>, CustomUserRepository { }
इस तरह आपको अनिवार्य रूप से विकल्प मिलता है:जो कुछ भी घोषित करना आसान है वह UserRepository
. में जाता है , जो कुछ भी बेहतर तरीके से मैन्युअल रूप से कार्यान्वित किया जाता है वह CustomUserRepository
. में चला जाता है . अनुकूलन विकल्प यहां प्रलेखित हैं।