JPA या JDBC, वे कैसे भिन्न हैं?


119

मैं जावा ईई सीख रहा हूं और मैंने उसी के लिए ग्लासफिश के साथ ग्रहण डाउनलोड किया। मैंने कुछ उदाहरण देखे और जावा ईई 5 के बारे में जानने के लिए ओरेकल डॉक्स भी पढ़ा। डेटाबेस से जुड़ना बहुत सरल था। मैंने एक डायनेमिक वेब प्रोजेक्ट खोला, एक सत्र EJB बनाया, मैंने EntityManager का उपयोग किया और प्राप्त तरीकों के साथ संग्रहीत डेटा तालिका तक पहुंच सकता है।

अपनी अगली परियोजना के लिए मैंने एक साधारण वर्ग बनाया था और फिर कुछ DB तालिका का उपयोग किया। सबसे पहली समस्या जो मुझे मिली, वह यह थी कि पर्सिस्टेंस यूनेट विशेषता केवल ईजेबी, सर्वलेट इत्यादि से पहचानी जाएगी और एक साधारण जावा वर्ग से नहीं। तो तब मैं EntityManager तरीके (या क्या मैं इस्तेमाल नहीं कर सकता?)

मुझे "JDBC" तरीके से जाने के लिए कहा गया। सबसे पहली समस्या जो मुझे मिली, वह थी डीबी से कनेक्शन लेना। लगता है यह सब हार्डकोड होना चाहिए। मेरे पास एक दृढ़ता थी। xml जिसके साथ मैं आसानी से डेटा बेस कनेक्शन को कॉन्फ़िगर कर सकता था। यहां तक ​​कि डीबी के लिए ड्राइवर स्थापित करना आसान था। इसके अलावा टेबल संस्थाओं तक पहुँचने के लिए JDBC में कोई भी सेट / सेट विधियाँ नहीं हैं।

मैं जेडीबीसी के संबंध में जेपीए और दृढ़ता को कैसे समझ सकता हूं? जेपीए के लिए क्या सोचा गया था? क्यों सेट / प्राप्त करने के तरीके हैं? क्या कोई इन दोनों के सार पर कुछ प्रकाश डाल सकता है और क्या "गुड़" के बिना पेशेवरों / विपक्ष हैं? कृपया कुछ लिंक भी सुझाएं। JPA और JDBC मतभेदों के लिए एक सरल Google खोज ने मुझे "शब्दावली" से भरी कुछ साइटों तक पहुंचाया जिसका मैं अनुसरण नहीं कर सका :(


2
JDBC ट्यूटोरियल से क्यों न शुरू करें: docs.oracle.com/javase/tutorial/jdbc/index.html
a_horse_with_no_name

2
जेपीए को ईजेबी या यहां तक ​​कि जावा ईई के बिना भी इस्तेमाल किया जा सकता है, आप सीधे हठ से एंटिटीमैनफैक्टरी बना सकते हैं।
जेम्स

जवाबों:


237

आम आदमी की शर्तों में:

  • JDBC डेटाबेस एक्सेस के लिए एक मानक है
  • JPA ORM के लिए एक मानक है

JDBC एक DB को सीधे कनेक्ट करने और इसके खिलाफ SQL चलाने के लिए एक मानक है - उदाहरण के लिए SELECT * FROM USERS, आदि। डेटा सेट लौटाए जा सकते हैं जिन्हें आप अपने ऐप में संभाल सकते हैं, और आप सभी सामान्य काम कर सकते हैं जैसे INSERT, DELETEसंग्रहीत कार्यविधियाँ चलाना, आदि। यह अधिकांश जावा डेटाबेस एक्सेस (जेपीए प्रदाताओं सहित) के पीछे अंतर्निहित तकनीकों में से एक है।

पारंपरिक JDBC ऐप्स के साथ समस्याओं में से एक यह है कि आपके पास अक्सर कुछ भद्दे कोड हो सकते हैं जहां बहुत सारे डेटा सेट और ऑब्जेक्ट्स के बीच मैपिंग होती है, तर्क SQL के साथ मिलाया जाता है, आदि।

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

अन्य उदाहरणों में शामिल हैं OpenJPA, toplink, आदि।

हुड के तहत, हाइबरनेट और जेपीए के लिए अधिकांश अन्य प्रदाता एसक्यूएल लिखते हैं और जेडीबीसी का उपयोग पढ़ने और लिखने के लिए और डीबी से करते हैं।


3
iBatis (आजकल MyBatis) एक JPA कार्यान्वयन नहीं है। यदि आप इस पर एक नज़र डालते हैं, तो आप देखेंगे कि इसकी बहुत अलग अवधारणा है।
मिको मूनू

धन्यवाद! मेरी गलती, मुझे लगा कि इसने जेपीए को लागू कर दिया है, अब सही किया गया है!
मार्क डी

3
सभी JPA प्रदाता SQL नहीं लिखते हैं और JDBC का उपयोग करते हैं ... क्योंकि वे "विभिन्न प्रकार के डेटास्टोर" (MongoDB, Neo4j, आदि) के लिए बने रह सकते हैं। DataNucleus JPA एक ऐसा उदाहरण है
DataNucleus

सच DataNucleus .. एक्सेल, आदि के लिए भी हैं - मूल प्रश्न JDBC / JPA थे इसलिए मैंने सही या गलत तरीके से माना कि वह रिलेशनल स्टोर्स में रुचि रखते थे।
मार्क डी।

52

JPA और JDBC के बीच मुख्य अंतर अमूर्तता का स्तर है।

JDBC डेटाबेस के साथ बातचीत के लिए एक निम्न स्तर का मानक है। इसी उद्देश्य के लिए जेपीए उच्च स्तर का मानक है। जेपीए आपको अपने एप्लिकेशन में ऑब्जेक्ट मॉडल का उपयोग करने की अनुमति देता है जो आपके जीवन को बहुत आसान बना सकता है। JDBC आपको सीधे डेटाबेस के साथ अधिक काम करने की अनुमति देता है, लेकिन इसके लिए अधिक ध्यान देने की आवश्यकता होती है। कुछ कार्यों को JPA का उपयोग करके कुशलता से हल नहीं किया जा सकता है, लेकिन JDBC के साथ अधिक कुशलता से हल किया जा सकता है।


20

JDBC, JPA की तुलना में बहुत कम-स्तरीय (और पुराना) विनिर्देश है। यह नंगे अनिवार्य है, JDBC शुद्ध SQL का उपयोग कर डेटाबेस के साथ बातचीत करने के लिए एक एपीआई है - प्रश्न भेजना और परिणाम प्राप्त करना। इसमें वस्तुओं या पदानुक्रमों की कोई धारणा नहीं है। JDBC का उपयोग करते समय, जावा वस्तुओं में परिणाम सेट (मूल रूप से एक या एक से अधिक डेटाबेस तालिकाओं से, आपकी SQL क्वेरी द्वारा लौटाया गया) के परिणाम स्वरूप अनुवाद करना आपके ऊपर है।

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


10

JDBC, JPA का पूर्ववर्ती है।

JDBC जावा दुनिया और डेटाबेस दुनिया के बीच एक पुल है। JDBC में आपको CRUD संचालन के लिए आवश्यक सभी गंदे विवरणों को उजागर करने की आवश्यकता होती है, जैसे तालिका नाम, स्तंभ नाम, जबकि JPA में (जो कि JDBC का उपयोग कर रहा है), आप डेटाबेस मेटाडेटा के उन विवरणों को भी निर्दिष्ट करते हैं, लेकिन जावा एनोटेशन के उपयोग के साथ।

तो जेपीए आपके लिए अपडेट क्वेरी बनाता है और उन संस्थाओं को प्रबंधित करता है जिन्हें आपने देखा या बनाया / अपडेट किया था (यह अधिक भी करता है)।

यदि आप जावा ईई कंटेनर के बिना जेपीए करना चाहते हैं, तो वसंत और इसके पुस्तकालयों का उपयोग बहुत ही जावा एनोटेशन के साथ किया जा सकता है।


"बिना जावा ईई कंटेनर ??" क्या आपका मतलब है कि वसंत और इसके पुस्तकालय वेब कंटेनर से स्वतंत्र हैं?
ब्रूस ज़ू

@ ब्रूसज़ु यह है। आप किसी वेब कंटेनर की आवश्यकता वाले स्प्रिंग फ्रेमवर्क घटकों में से कई का उपयोग कर सकते हैं। उदाहरण के लिए, निर्भरता इंजेक्शन, ऐसा कुछ नहीं है जिसकी आपको केवल वेब संदर्भ में आवश्यकता है।
डॉल्फिज

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