फ्रंटएंड पर तीसरे मॉड्यूल से प्रोजेक्ट को याद रखें, जहां सर्वर एपीआई के लिए आरपीजी एडमिन पैनल को लागू करना आवश्यक था? किसी को याद हो तो सर्वर पर स्टोरेज के तौर पर एक मैप का इस्तेमाल किया जाता था। स्वाभाविक रूप से, वास्तविक जीवन में ऐसे भंडारण का उपयोग नहीं किया जाता है, लेकिन डेटाबेस का उपयोग किया जाता है। इस परियोजना का लक्ष्य हाइबरनेट का उपयोग करके एक वैकल्पिक रिपॉजिटरी परत कार्यान्वयन लिखना होगा।

इसके लिए आपको चाहिए:

  1. भंडार से कांटा
  2. प्रोजेक्ट के अपने संस्करण को अपने कंप्यूटर पर डाउनलोड करें।
  3. Pom.xml में निर्भरताएँ जोड़ें:
    • mysql: mysql-कनेक्टर-जावा: 8.0.30
    • org.hibernate: hibernate-core-jakarta: 5.6.11.Final
  4. एक मेवेन बिल्ड बनाएं (एमवीएन क्लीन इंस्टॉल)। बदलाव के लिए, हम जावा संस्करण 1.8 का उपयोग करते हैं।
  5. आइडिया के माध्यम से लॉन्च कॉन्फ़िगरेशन जोड़ें। इस मद का कार्यान्वयन व्याख्यान https://codegym.cc/quests/lectures/cgu.module3.lecture02 (आइटम 4) में पाया जा सकता है। आर्टिफैक्ट के लिए एकमात्र अंतर एक अलग नाम है। यदि आपने सब कुछ ठीक किया और एप्लिकेशन लॉन्च किया, तो आपको कुछ ऐसा दिखाई देगा:
  6. वर्कबेंच में आरपीजी स्कीमा निर्माण स्क्रिप्ट चलाएँ:
    CREATE SCHEMA `rpg` ;
    
  7. वैकल्पिक । यदि आप यह देखना चाहते हैं कि किस व्यवहार की अपेक्षा की जाती है, तो आप कंस्ट्रक्टर पैरामीटर में वर्ग में com.game.service.PlayerServiceएनोटेशन मान को "db" से "मेमोरी"@Qualifier में बदल सकते हैं । इस मामले में, स्प्रिंग . परीक्षण के बाद, एनोटेशन मान को वापस "db" में बदलना न भूलें ।IPlayerRepositoryPlayerRepositoryMemory@Qualifier
  8. एंटिटी क्लास में सभी आवश्यक एनोटेशन व्यवस्थित करें com.game.entity.Player। तालिका का नाम "खिलाड़ी", स्कीमा "आरपीजी" होना चाहिए। एनाम्स के लिए, @Enumerated(EnumType.ORDINAL)एनोटेशन के अतिरिक्त उपयोग करें @Column। आपको याद दिला दूं कि नाम फ़ील्ड की लंबाई 12 वर्णों तक होनी चाहिए, शीर्षक फ़ील्ड - 30 वर्णों तक। निश्चित रूप से सभी क्षेत्र रिक्त नहीं होने चाहिए।
  9. क्लास में एक प्राइवेट फाइनल फील्ड PlayerRepositoryDBजोड़ें , इस फील्ड को क्लास कंस्ट्रक्टर में इनिशियलाइज़ करें। गुणों का उपयोग सामान्य कार्यों में करें (हम MySQL डेटाबेस संस्करण 8 के साथ काम करेंगे)। दिलचस्प से - जोड़ें SessionFactory sessionFactory
    properties.put(Environment.HBM2DDL_AUTO, "update");
    
    यह आपको मैन्युअल रूप से (या एक एसक्यूएल स्क्रिप्ट के निष्पादन के माध्यम से) तालिका बनाने की अनुमति नहीं देगा।
  10. सभी वर्ग विधियों को लागू करें। एक बदलाव के लिए, आइए यह करें:
    • getAllके माध्यम से विधि को लागू करेंNativeQuery
    • getAllCountके माध्यम से विधि को लागू करेंNamedQuery
    • विधि में beforeStop, y sessionFactoryविधि को कॉल करें close। विधि पर एक एनोटेशन होने से @PreDestroy, एप्लिकेशन को रोकने से पहले स्प्रिंग इस विधि को कॉल करेगा, और यह आपको सभी सिस्टम संसाधनों को वैध रूप से जारी करने की अनुमति देगा।
    • अन्य तरीकों का कार्यान्वयन आप पर निर्भर है। लेकिन लेन-देन के बारे में मत भूलना और उन तरीकों के लिए प्रतिबद्ध है जो किसी तरह डेटाबेस की सामग्री को बदलते हैं।
  11. एप्लिकेशन लॉन्च करें। यदि आपने सब कुछ ठीक किया, तो आपको एक कार्यशील आवेदन मिलेगा। लेकिन वहां कोई डेटा नहीं है, इसलिए कार्यक्षेत्र के माध्यम से init.sql स्क्रिप्ट (संसाधनों से) चलाएं ताकि वे दिखाई दें। उसके बाद ब्राउज़र में F5 दबाएं और जांचें कि आपने सभी तरीकों को सही तरीके से लागू किया है।
  12. यह देखना दिलचस्प होगा कि वास्तव में हाइबरनेट किन प्रश्नों को निष्पादित करता है, तो चलिए क्वेरी लॉगिंग जोड़ते हैं। ऐसा करने के लिए, p6spy:p6spy:3.9.1 निर्भरता को pom.xml में जोड़ें । संसाधन फ़ोल्डर में, एक फ़ाइल बनाएं spy.properties , जिसमें निर्दिष्ट करें:
    driverlist=com.mysql.cj.jdbc.Driver
    dateformat=yyyy-MM-dd hh:mm:ss a
    appender=com.p6spy.engine.spy.appender.StdoutLogger
    logMessageFormat=com.p6spy.engine.spy.appender.MultiLineFormat
    
    और PlayerRepositoryDB वर्ग के निर्माता में, दो विकल्प बदलें:
    properties.put(Environment.DRIVER, "com.p6spy.engine.spy.P6SpyDriver");
    properties.put(Environment.URL, "jdbc:p6spy:mysql://localhost:3306/rpg");
    
    अब प्रत्येक अनुरोध के लिए सर्वर आउटपुट में आपको 2 लाइनें दिखाई देंगी। पहला यह है कि कौन सा कथन तैयार किया गया है, दूसरा सम्मिलित मापदंडों के साथ क्वेरी है।

बस इतना ही, प्रोजेक्ट तैयार है, बधाई हो!

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


परियोजना विश्लेषण।