यहाँ प्रत्येक उल्लिखित तकनीक का परिचय दिया गया है।
वसंत-डीएओ
स्प्रिंग-डीएओ एक सख्त अर्थ में एक स्प्रिंग मॉड्यूल नहीं है, बल्कि ऐसे कन्वेंशन हैं जो आपको डीएओ लिखने के लिए और उन्हें अच्छी तरह से लिखने के लिए निर्देशित करना चाहिए। जैसे, यह आपके डेटा तक पहुंचने के लिए न तो इंटरफेस प्रदान करता है और न ही कार्यान्वयन। DAO लिखते समय, आपको उन्हें इस तरह से एनोटेट करना चाहिए @Repository
ताकि अंतर्निहित तकनीक (JDBC, Hibernate, JPA, आदि) से जुड़े अपवाद लगातार उचित DataAccessException
उपवर्ग में अनुवादित हों ।
एक उदाहरण के रूप में, मान लें कि आप अब हाइबरनेट का उपयोग कर रहे हैं, और आपकी सेवा परत इस HibernateException
पर प्रतिक्रिया करने के लिए पकड़ती है। यदि आप जेपीए में बदल जाते हैं, तो आपके डीएओ इंटरफेस में बदलाव नहीं होना चाहिए, और सर्विस लेयर अभी भी उन ब्लॉकों के साथ संकलित होगी जो पकड़ते हैं HibernateException
, लेकिन आप इन ब्लॉकों में कभी भी प्रवेश नहीं करेंगे क्योंकि आपके डीएओ अब जेपीए को फेंक रहे हैं PersistenceException
। @Repository
अपने DAO पर उपयोग करके , अंतर्निहित तकनीक से जुड़े अपवादों का स्प्रिंग में अनुवाद किया जाता है DataAccessException
; आपकी सेवा की परत इन अपवादों को पकड़ती है और यदि आप दृढ़ता प्रौद्योगिकी को बदलने का निर्णय लेते हैं, तो वसंत DataAccessExceptions
को अभी भी फेंक दिया जाएगा क्योंकि वसंत ने देशी अपवादों का अनुवाद किया है।
ध्यान दें कि इसका निम्न कारणों से सीमित उपयोग है:
- आपका आमतौर पर दृढ़ता अपवादों को नहीं पकड़ना चाहिए, क्योंकि प्रदाता ने लेन-देन को वापस ले लिया हो सकता है (सटीक अपवाद उपप्रकार के आधार पर), और इस प्रकार आपको वैकल्पिक पथ के साथ निष्पादन जारी नहीं रखना चाहिए।
- अपवादों का पदानुक्रम आमतौर पर आपके प्रदाता में होता है जो स्प्रिंग प्रदान करता है, और इससे एक प्रदाता से दूसरे तक कोई निश्चित मैपिंग नहीं होती है। इस पर भरोसा करना खतरनाक है। हालाँकि
@Repository
, आपके DAO को एनोटेट करना एक अच्छा विचार है , क्योंकि सेम को स्कैन प्रक्रिया द्वारा स्वचालित रूप से जोड़ा जाएगा। इसके अलावा, स्प्रिंग एनोटेशन में अन्य उपयोगी सुविधाओं को जोड़ सकता है।
वसंत-JDBC
स्प्रिंग-जेडडीबीसी JdbcTemplate वर्ग प्रदान करता है, जो प्लंबिंग कोड को हटाता है और आपको SQL क्वेरी और मापदंडों पर ध्यान केंद्रित करने में मदद करता है। आपको बस इसे एक से कॉन्फ़िगर करने की आवश्यकता है DataSource
, और फिर आप इस तरह कोड लिख सकते हैं:
int nbRows = jdbcTemplate.queryForObject("select count(1) from person", Integer.class);
Person p = jdbcTemplate.queryForObject("select first, last from person where id=?",
rs -> new Person(rs.getString(1), rs.getString(2)),
134561351656L);
स्प्रिंग-जेडडीबीसी एक JdbcDaoSupport भी प्रदान करता है, जिससे आप अपने DAO को विकसित कर सकते हैं। यह मूल रूप से 2 गुणों को परिभाषित करता है: एक डेटा स्रोत और एक JdbcTemplate कि दोनों का उपयोग DAO विधियों को लागू करने के लिए किया जा सकता है। यह एसक्यूएल अपवादों से लेकर स्प्रिंग डेटाएक्स्टैप्शन तक एक अपवाद अनुवादक भी प्रदान करता है।
यदि आप सादे jdbc का उपयोग करने की योजना बनाते हैं, तो यह वह मॉड्यूल है जिसका आपको उपयोग करने की आवश्यकता होगी।
वसंत-ORM
स्प्रिंग-ओआरएम एक छाता मॉड्यूल है जो कई दृढ़ता प्रौद्योगिकियों को कवर करता है, अर्थात् जेपीए, जेडीओ, हाइबरनेट और आईबैटिस। इन तकनीकों में से प्रत्येक के लिए, स्प्रिंग एकीकरण कक्षाएं प्रदान करता है ताकि प्रत्येक तकनीक का उपयोग कॉन्फ़िगरेशन के स्प्रिंग सिद्धांतों का पालन किया जा सके, और आसानी से स्प्रिंग लेनदेन प्रबंधन के साथ एकीकृत किया जा सके।
प्रत्येक प्रौद्योगिकी के लिए, कॉन्फ़िगरेशन मूल रूप DataSource
से किसी प्रकार के सेम को इंजेक्ट करने में शामिल होता है SessionFactory
याEntityManagerFactory
आदि बीन । शुद्ध JDBC के लिए, ऐसे एकीकरण वर्गों (JdbcTemplate के अलावा) की कोई आवश्यकता नहीं है, क्योंकि JDBC केवल एक DataSource पर निर्भर करता है।
यदि आप जेपीए या हाइबरनेट जैसे ओआरएम का उपयोग करने की योजना बनाते हैं, तो आपको स्प्रिंग-जेडडीबीसी की आवश्यकता नहीं होगी, लेकिन केवल यह मॉड्यूल।
वसंत-डाटा
स्प्रिंग-डेटा एक छतरी परियोजना है जो SQL और NOSQL दोनों डेटा स्रोतों को कवर करते हुए अधिक सामान्य तरीके से डेटा (DAO + एनोटेशन) तक पहुंचने के तरीके को परिभाषित करने के लिए एक सामान्य एपीआई प्रदान करता है।
प्रारंभिक विचार एक प्रौद्योगिकी प्रदान करने के लिए है ताकि डेवलपर एक DAO (खोजक विधियों) और इकाई वर्गों के लिए एक प्रौद्योगिकी-अज्ञेयवादी तरीके से इंटरफ़ेस लिखता है, और केवल कॉन्फ़िगरेशन पर आधारित है (DAO और संस्थाओं + वसंत कॉन्फ़िगरेशन पर टिप्पणियां, हो) xml- या java- आधारित), कार्यान्वयन तकनीक का फैसला करता है, चाहे वह JPA (SQL) या रेडिस, हडूप, आदि (NOSQL) हो।
यदि आप खोजक विधि नामों के लिए वसंत द्वारा परिभाषित नामकरण परंपराओं का पालन करते हैं, तो आपको सबसे सरल मामलों के लिए खोजक विधियों के अनुरूप क्वेरी स्ट्रिंग प्रदान करने की भी आवश्यकता नहीं है। अन्य स्थितियों के लिए, आपको खोज तरीकों पर एनोटेशन के अंदर क्वेरी स्ट्रिंग प्रदान करनी होगी।
जब अनुप्रयोग संदर्भ लोड होता है, तो वसंत DAO इंटरफेस के लिए परदे के पीछे प्रदान करता है, जिसमें डेटा एक्सेस तकनीक से संबंधित सभी बॉयलरप्लेट कोड होते हैं, और कॉन्फ़िगर किए गए प्रश्नों को आमंत्रित करता है।
स्प्रिंग-डेटा गैर-SQL प्रौद्योगिकियों पर केंद्रित है, लेकिन फिर भी JPA (एकमात्र SQL तकनीक) के लिए एक मॉड्यूल प्रदान करता है।
आगे क्या होगा
यह सब जानते हुए, अब आपको तय करना है कि क्या चुनना है। यहाँ अच्छी खबर यह है कि आपको तकनीक के लिए एक निश्चित अंतिम विकल्प बनाने की आवश्यकता नहीं है। यह वास्तव में है जहां स्प्रिंग पावर रहता है: एक डेवलपर के रूप में, आप कोड लिखते समय व्यवसाय पर ध्यान केंद्रित करते हैं, और यदि आप इसे अच्छी तरह से करते हैं, तो अंतर्निहित प्रौद्योगिकी को बदलना एक कार्यान्वयन या कॉन्फ़िगरेशन विस्तार है।
- संस्थाओं के लिए POJO वर्गों के साथ एक डेटा मॉडल को परिभाषित करें, और इकाई विशेषताओं और अन्य संस्थाओं से संबंधों का प्रतिनिधित्व करने के लिए / सेट विधियाँ प्राप्त करें। आपको निश्चित रूप से प्रौद्योगिकी के आधार पर इकाई वर्गों और क्षेत्रों को एनोटेट करने की आवश्यकता होगी, लेकिन अभी के लिए, पीओजेओ शुरू करने के लिए पर्याप्त हैं। बस अब के लिए व्यावसायिक आवश्यकताओं पर ध्यान केंद्रित।
- अपने DAO के लिए इंटरफेस को परिभाषित करें। 1 डीएओ ठीक 1 इकाई को कवर करता है, लेकिन आपको निश्चित रूप से उनमें से प्रत्येक के लिए डीएओ की आवश्यकता नहीं होगी, क्योंकि आपको रिश्तों को नेविगेट करके अतिरिक्त संस्थाओं को लोड करने में सक्षम होना चाहिए। सख्त नामकरण सम्मेलनों के बाद खोजक विधियों को परिभाषित करें।
- इसके आधार पर, कोई और आपके DAO के लिए मोक्स के साथ, सेवा स्तर पर काम करना शुरू कर सकता है।
- आप अपनी आवश्यकताओं के लिए सबसे उपयुक्त खोजने के लिए विभिन्न दृढ़ता तकनीकों (sql, no-sql) को सीखते हैं और उनमें से किसी एक को चुनते हैं। इसके आधार पर, आप एंटिटीज़ को एनोटेट करते हैं और DAO लागू करते हैं (या यदि आप स्प्रिंग-डेटा का उपयोग करना चुनते हैं तो स्प्रिंग उन्हें आपके लिए लागू करते हैं)।
- यदि व्यावसायिक आवश्यकताएं विकसित होती हैं और आपकी डेटा एक्सेस तकनीक इसका समर्थन करने के लिए पर्याप्त नहीं है (जैसे, आपने JDBC और कुछ संस्थाओं के साथ शुरुआत की थी, लेकिन अब एक अमीर डेटा मॉडल की आवश्यकता है और JPA एक बेहतर विकल्प है), तो आपको कार्यान्वयन को बदलना होगा अपने DAO में, अपनी संस्थाओं पर कुछ एनोटेशन जोड़ें और स्प्रिंग कॉन्फ़िगरेशन बदलें (EntityManagerFactory परिभाषा जोड़ें)। आपके व्यवसाय कोड के बाकी लोगों को आपके परिवर्तन से अन्य प्रभावों को नहीं देखना चाहिए।
नोट: लेनदेन प्रबंधन
वसंत लेनदेन प्रबंधन के लिए एक एपीआई प्रदान करता है। यदि आप डेटा एक्सेस के लिए वसंत का उपयोग करने की योजना बनाते हैं, तो आपको लेनदेन प्रबंधन के लिए भी वसंत का उपयोग करना चाहिए, क्योंकि वे वास्तव में अच्छी तरह से एक साथ एकीकृत होते हैं। वसंत द्वारा समर्थित प्रत्येक डेटा एक्सेस तकनीक के लिए, स्थानीय लेनदेन के लिए एक मिलान लेनदेन प्रबंधक है, या यदि आपको वितरित लेनदेन की आवश्यकता है तो आप जेटीए चुन सकते हैं। वे सभी एक ही एपीआई को लागू करते हैं, ताकि (एक बार फिर) प्रौद्योगिकी का विकल्प केवल एक विन्यास हो जो व्यापार कोड पर आगे के प्रभाव के बिना बदला जा सके।
नोट: स्प्रिंग डॉक्यूमेंटेशन
आपके द्वारा उल्लिखित स्प्रिंग प्रलेखन के लिंक पुराने हैं। यहाँ नवीनतम रिलीज़ का दस्तावेज़ीकरण है (4.1.6, सभी विषयों को शामिल करते हुए):
स्प्रिंग-डेटा स्प्रिंग फ्रेमवर्क का हिस्सा नहीं है। एक सामान्य मॉड्यूल है जिसे आपको पहले सिद्धांतों के लिए उपयोग करने के लिए पढ़ना चाहिए। प्रलेखन यहाँ पाया जा सकता है: