हाइबरनेट पर myBatis के फायदे क्या हैं? [बन्द है]


33

मैंने अपने दम पर कुछ शोध किया है और मूल अवधारणा को समझा है। लेकिन कुछ अंतर्दृष्टि केवल वास्तविक अनुभव के माध्यम से प्राप्त की जा सकती हैं।

मायबैटिस के क्या फायदे हैं जो इसे एक नया ढांचा सीखने के लायक बनाएंगे?
किस मामले में आप इसका उपयोग करने से बचेंगे?


3
मैंने दोनों का परीक्षण किया और केयेन का उपयोग कर समाप्त किया।
deadalnix

जवाबों:


38

गौर कीजिए कि आप क्या हासिल करने की कोशिश कर रहे हैं। आमतौर पर, कमांड क्वेरी प्रतिसाद अलगाव मॉडल जटिल डोमेन के लिए अच्छा काम करता है।

कारण यह है कि आप आम तौर पर दो चीजों में से एक करने की कोशिश कर रहे हैं:

  1. कुछ जटिल डोमेन इकाइयां बनाएं / अपडेट करें / हटाएं
  2. एनालिसिस लाने के लिए क्वेरी (यानी समन / एकत्रीकरण क्वेरी)

हाइबरनेट केस 1 के लिए अच्छी तरह से काम करता है जिससे आप केवल एक पीओजेओ बना सकते हैं और इसे जारी रख सकते हैं / अपडेट कर सकते हैं। यह भी जल्दी से करता है, जब तक कि आपका डोमेन काफी बड़ा न हो।

myBatis लाने के लिए बहुत अच्छा है (प्रश्न 2) जहाँ आप सिर्फ एक उत्तर चाहते हैं। हाइबरनेट पूरे ऑब्जेक्ट ग्राफ को लोड करने का प्रयास करेगा और आपको एक बड़े डोमेन पर काम करने के लिए LazyLoading ट्रिक्स के साथ ट्यूनिंग क्वेरी शुरू करने की आवश्यकता होगी। जटिल विश्लेषणात्मक प्रश्नों को चलाने के दौरान यह महत्वपूर्ण है जो इकाई वस्तुओं को भी वापस नहीं करता है। हाइबरनेट केवल इस मामले में BigDecimal जैसे विशाल डिफ़ॉल्ट प्रकारों के साथ SqlQuery और सेम ट्रांसफॉर्मर प्रदान करता है, जबकि myBatis आसानी से एक साधारण POJO गैर-इकाई के लिए मैप कर सकता है।

ये दो मामले कमांड्स के बीच का अंतर है जहाँ आप डोमेन डेटा और रिस्पॉन्स को बदलना चाहते हैं जहाँ आप कुछ डेटा लाना चाहते हैं।

तो, इन दो मामलों पर विचार करें और आपका आवेदन क्या करता है। यदि आपके पास एक साधारण डोमेन है और बस जानकारी प्राप्त करना है, तो myBatis का उपयोग करें। यदि आपके पास एक जटिल डोमेन है और संस्थाओं को बनाए रखना है, तो हाइबरनेट का उपयोग करें। यदि आप दोनों करते हैं, तो हाइब्रिड दृष्टिकोण पर विचार करें। यही कारण है कि हम अपनी परियोजना पर उपयोग करते हैं जिसमें हजारों इकाइयां हैं जो इसे नियंत्रण में रखती हैं। ;)


2
हाइबरनेट आपके केस 2 के साथ भी अच्छा काम करता है। एक साधारण उदाहरण के लिए, देखें: mkyong.com/hibernate/hibernate-native-sql-queries-examples
माइक

3
"हाइबरनेट पूरे ऑब्जेक्ट ग्राफ को लोड करने का प्रयास करेगा" यह कॉन्फ़िगरेशन की गलती की तरह लगता है। "लाजेल्डिंग ट्रिक्स के साथ ट्यूनिंग क्वेश्चन शुरू करने की आवश्यकता है" लगता है जैसे आपने कहीं सेट किया है। जेपीए में जेपीक्यूएल है जो व्यावहारिक रूप से एसक्यूएल है, फिर भी हाइबरनेट / जेपीए के साथ एकीकृत है। मुझे लगता है कि यह # 2 बहुत अच्छा करता है। ORM को 100% सही ढंग से कॉन्फ़िगर करने से पहले लोगों के लिए एक वर्ष या उससे अधिक समय तक उत्पादन में चलना आम बात है। जब मैं कहता हूं कि मैं कम से कम नहीं कर रहा हूं, तो यह एक कॉन्फ़िगरेशन त्रुटि है - इन उपकरणों के साथ कॉन्फ़िगरेशन वास्तव में समय लेने और मुश्किल हो सकता है!
ग्लेनपेटर्सन

3
@GlenPeterson मैं यह नहीं कह रहा हूँ कि हाइबरनेट का नामकरण नहीं किया जा सकता है, लेकिन अधिकांश लोगों के लिए, जटिल डोमेन निकाय को धीरे-धीरे लोड किया जाएगा जब तक कि अनुकूलन नहीं किए जाते हैं, जैसा कि आपने उद्धृत किया है। अधिकांश उपयोगकर्ताओं के लिए जटिल विश्लेषणात्मक प्रश्न myBatis के साथ अधिक सीधे हैं, हालांकि वास्तव में ORM के साथ ही इसे प्राप्त किया जा सकता है। कई के लिए सवाल यह है कि क्या उन्हें अपने उत्पाद के लिए ओआरएम के विक्रेता की स्वतंत्रता की आवश्यकता है।
जोसेफ वासना

10
हाइबरनेट प्रकार का दिखावा कोई डीबी नहीं है और आप सिर्फ डेटा मॉडल का इलाज करते हैं जैसे कि यह जावा संग्रह का उपयोग करके बनाया गया था। जो अक्सर ऐसा नहीं होता है। DB स्तर पर डेटा प्रतिनिधित्व बहुत भिन्न हो सकता है और जावा संग्रह में इसे स्वचालित रूप से मैप करने की कोशिश करना जरूरी नहीं है। यही कारण है कि हाइबरनेट "लीक एब्स्ट्रैक्शन" का एक आदर्श उदाहरण है। MyBatis बहुत सरल है, समझने में आसान है, कोई जादू नहीं है और .. हाँ, SQL है जो मुझे एक अच्छी बात लगती है क्योंकि SQL- आधारित डेटाबेस के लिए SQL का उपयोग करने में कुछ भी गलत नहीं है।
मार्सिन

2
@ मेरिन महान बिंदु। मैंने हाइबरनेट में संग्रह अनुकरण के साथ बहुत सारी समस्याएं देखी हैं। उदाहरण के लिए कुछ कोड myBag.size () को कॉल करते हैं और हाइबरनेट उन्हें गिनने से पहले 750K ऑब्जेक्ट्स को मेमोरी में लोड करने की कोशिश करता है। यदि आपको केवल SQL की आवश्यकता है, तो SQL का उपयोग करें।
जोसेफ लस्ट

19

MyBatis SQL केंद्रित है। यह आपको पेड़ों को ऑब्जेक्ट करने के लिए एसक्यूएल स्टेटमेंट और मैपिंग परिणाम (टेबल) बुलाता है।

मुख्य लाभ यह है कि यह एक ओआरएम नहीं है। यह ऑब्जेक्ट के लिए तालिकाओं को मैप नहीं करता है ताकि ऑरम प्रतिबाधा बेमेल को नुकसान न पहुंचे। जटिल या विरासत डेटाबेस के लिए अच्छी तरह से फिट बैठता है या संग्रहीत प्रक्रियाओं, विचारों और जैसे डीबी सुविधाओं का उपयोग करने के लिए।

यह सीखने में काफी सरल और आसान है इसलिए कम कुशल टीमों के लिए भी अच्छी तरह से फिट बैठता है क्योंकि उनके बीच एक हाइबरनेट गुरु होने की कोई आवश्यकता नहीं है।

Jpetstore 6 http://mybatis.org/spring/sample.html पर एक नज़र डालें


2
उन "कम कुशल टीमों" को अभी भी एसक्यूएल को जानना आवश्यक है।
perp

अच्छा संक्षिप्त जवाब, दो मुख्य अंतर हैं: डीबी केंद्रित + उथले सीखने की अवस्था। लेकिन मैं "जटिल या विरासत डेटाबेस के लिए अच्छी तरह से फिट बैठता है" के साथ पूरी तरह से सहमत नहीं हूं। जब आप db डिज़ाइन पर अधिक नियंत्रण रखते हैं तो db केंद्रित होने का लाभ अधिक स्पष्ट हो जाता है।
डीपीएम

5

चूँकि यह प्रश्न मेरी टिप्पणी को संदर्भित करता है , यहाँ मुझे यह लिखने में क्या ध्यान है।

सबसे पहले, यह आपके मूल प्रश्न के संदर्भ से लिया गया है। अन्य परिस्थितियों में मैं एक अलग सलाह दे सकता था। इस बिंदु ने मुझे MyBatis का सुझाव दिया है:

... हमें कुछ प्रदर्शन समस्याओं का सामना करना पड़ा।

हमने डेटाबेस प्रदर्शन हासिल करने के लिए सादे Jdbc के पक्ष में हाइबरनेट छोड़ने का फैसला किया ...

पिछले परियोजनाओं में से एक में, हमारी टीम हाइबरनेट से आपके द्वारा वर्णित कारणों के लिए आगे बढ़ने पर विचार कर रही है। आपके समान, हम JDBC में स्विच करने जा रहे थे, लेकिन एक अन्य परियोजना के सहयोगियों ने हमें MyBatis की सिफारिश की। टीम ने इसे एक कोशिश देने का फैसला किया, जबकि अगर चीजें गलत हुईं तो जेडीबीसी को इस मामले में कमबैक विकल्प के रूप में रखा जाएगा।

उस समय, मैं MyBatis के बारे में कुछ भी नहीं जानता था, लेकिन JDBC के साथ पर्याप्त अनुभव था, यह सुनिश्चित करने के लिए कि यह काम करेगा। इसके बावजूद, मैं MyBatis की कोशिश करने का दृढ़ता से समर्थन कर रहा था, इसका मुख्य कारण यह है कि मेरे पिछले अनुभव के अनुसार, बॉयलरप्लेट कोड की मात्रा जिसे हमें जेडीबीसी के साथ लिखना होगा वह सिर्फ चुनौतीपूर्ण होगा।

  • निष्पक्ष होने के लिए, मुझे यह समझने में आसान, विश्वसनीय और डेटाबेस इंटरैक्शन पर नियंत्रण की अच्छी भावना देने के लिए जेडीबीसी पसंद है, लेकिन इसके लिए भुगतान करने वाला मूल्य वास्तव में उच्च है। मेरी उंगलियां हर बार यह महसूस करना शुरू करती हैं कि मुझे याद है कि मुझे जेडडीबीसी के साथ कितना बॉयलरप्लेट टाइप करना था।

वैसे भी, हमने MyBatis की कोशिश की और इसने विज्ञापन के रूप में काम किया। इसलिए मैंने आपके द्वारा पूछे गए टिप्पणी को लिखा।

यदि आप मुझसे प्रौद्योगिकी का विस्तृत विवरण देने की अपेक्षा करते हैं, या किसी प्रकार इसकी श्रेष्ठता की प्रशंसा करते हैं - तो क्षमा करें, मैं ऐसा नहीं कर सकता। अगर मैं कर सकता था - तो मैं पहले ही लिख दूंगा कि आपके मूल प्रश्न के अलग उत्तर में, छोटी टिप्पणी देने के बजाय। मैंने उल्लेख किया कि मुझे माईबैटिस के बारे में कुछ भी पता नहीं था - फिर भी मुझे इसके बारे में बहुत कम ज्ञान है। हाइबरनेट से संक्रमण अन्य टीम के सदस्यों द्वारा किया गया था और यह उस कोड को प्रभावित नहीं करता था जिस पर मैं काम कर रहा था। मैंने केवल मुख्य टेकअवे को याद किया (जिस पर मैंने अपनी टिप्पणी की थी), अर्थात् 1) MyBatis ने हमारे द्वारा हाइबरनेट के साथ जो मुद्दे हल किए थे, 2) यह अपने आप के मुद्दों को पेश नहीं करता था और 3) इसने हमें बॉयोप्लेट कोड लिखने से बचने की अनुमति दी थी। अगर हम JDBC में स्विच करते हैं तो मामले में उम्मीद थी। बस इतना ही।


3

हाइबरनेट अच्छी तरह से बहुत अधिक जादू , अप्रत्याशित व्यवहार और बड़े सीखने की अवस्था के लिए जाना जाता है। वहाँ अन्य रूपरेखाएँ हैं जो सादगी पर अधिक केंद्रित हैं और आपको नियंत्रण में रहने देंगी।

myBatis उनमें से एक है, मेरा प्रोजेक्ट MentaBean एक और एक है। मैंने इसके बारे में एक ब्लॉग पोस्ट लिखा है जो मदद कर सकता है।


6
हाय सर्जियो और स्वागत है। हमारा समुदाय आमतौर पर आत्म-प्रचार पर हावी हो जाता है , और हमें आपके उत्तरों में स्पष्ट रूप से अपनी संबद्धता का खुलासा करने की आवश्यकता होती है। मैंने आपके उत्तर को यह इंगित करने के लिए संपादित किया है कि MentaBean एक परियोजना है जिसमें आप शामिल हैं, और आपने जो ब्लॉग पोस्ट लिखी है वह आपको पसंद है, यदि आप इसे बदलने के लिए स्वतंत्र महसूस नहीं करते हैं, लेकिन कृपया बनाए रखें कुछ प्रकार के प्रकटीकरण जो आप MentaBean के साथ शामिल हैं। अधिक जानकारी के लिए हमारे अक्सर पूछे जाने वाले प्रश्न में संबंधित अनुभाग पढ़ें ।
यानिस

हाय यानिस। मै वो कर लूंगा। सर उठाने के लिए धन्यवाद। :)
सर्जियो ओलिवेरा जूनियर

-1

मैंने 5 साल पहले हाइबरनेट 3 का उपयोग करके डेटा लोडिंग और डेटा ट्रांसफ़ॉर्मेशन प्रोजेक्ट के लिए हाइबरनेट का इस्तेमाल किया था और मुझे लगा कि यह अद्भुत है। मैं एक छोटा ई-कॉमर्स एप्लिकेशन कर रहा हूं और मैंने हाइबरनेट 4 का उपयोग करने की कोशिश की और मैं बेहद निराश था। उन्होंने उपकरण हटा दिए हैं और कसकर आईडीई को एकीकृत किया है। मैंने माईबेटिस की कोशिश की और मैं एक ही रात में सब कुछ काम कर जाता हूं और मैं बहुत खुश हूं कि किसी एप्लिकेशन को एकीकृत करना कितना आसान है। मुझे लगता है कि हाइबरनेट भी फूला हुआ हो गया है और मैं इस बिंदु पर हाइबरनेट पर ईजेबी 3 का उपयोग करूंगा।


1
EJB 3 और हाइबरनेट की तुलना कैसे करता है ???
जोस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.