फ्रंटएंड पर तीसरे मॉड्यूल से प्रोजेक्ट को याद रखें, जहां सर्वर एपीआई के लिए आरपीजी एडमिन पैनल को लागू करना आवश्यक था? किसी को याद हो तो सर्वर पर स्टोरेज के तौर पर एक मैप का इस्तेमाल किया जाता था। स्वाभाविक रूप से, वास्तविक जीवन में ऐसे भंडारण का उपयोग नहीं किया जाता है, लेकिन डेटाबेस का उपयोग किया जाता है। इस परियोजना का लक्ष्य हाइबरनेट का उपयोग करके एक वैकल्पिक रिपॉजिटरी परत कार्यान्वयन लिखना होगा।
इसके लिए आपको चाहिए:
- भंडार से कांटा
- प्रोजेक्ट के अपने संस्करण को अपने कंप्यूटर पर डाउनलोड करें।
- Pom.xml में निर्भरताएँ जोड़ें:
- mysql: mysql-कनेक्टर-जावा: 8.0.30
- org.hibernate: hibernate-core-jakarta: 5.6.11.Final
- एक मेवेन बिल्ड बनाएं (एमवीएन क्लीन इंस्टॉल)। बदलाव के लिए, हम जावा संस्करण 1.8 का उपयोग करते हैं।
- आइडिया के माध्यम से लॉन्च कॉन्फ़िगरेशन जोड़ें। इस मद का कार्यान्वयन व्याख्यान https://codegym.cc/quests/lectures/cgu.module3.lecture02 (आइटम 4) में पाया जा सकता है। आर्टिफैक्ट के लिए एकमात्र अंतर एक अलग नाम है। यदि आपने सब कुछ ठीक किया और एप्लिकेशन लॉन्च किया, तो आपको कुछ ऐसा दिखाई देगा:
- वर्कबेंच में आरपीजी स्कीमा निर्माण स्क्रिप्ट चलाएँ:
CREATE SCHEMA `rpg` ;
- वैकल्पिक । यदि आप यह देखना चाहते हैं कि किस व्यवहार की अपेक्षा की जाती है, तो आप कंस्ट्रक्टर पैरामीटर में वर्ग में
com.game.service.PlayerService
एनोटेशन मान को "db" से "मेमोरी"@Qualifier
में बदल सकते हैं । इस मामले में, स्प्रिंग . परीक्षण के बाद, एनोटेशन मान को वापस "db" में बदलना न भूलें ।IPlayerRepository
PlayerRepositoryMemory
@Qualifier
- एंटिटी क्लास में सभी आवश्यक एनोटेशन व्यवस्थित करें
com.game.entity.Player
। तालिका का नाम "खिलाड़ी", स्कीमा "आरपीजी" होना चाहिए। एनाम्स के लिए,@Enumerated(EnumType.ORDINAL)
एनोटेशन के अतिरिक्त उपयोग करें@Column
। आपको याद दिला दूं कि नाम फ़ील्ड की लंबाई 12 वर्णों तक होनी चाहिए, शीर्षक फ़ील्ड - 30 वर्णों तक। निश्चित रूप से सभी क्षेत्र रिक्त नहीं होने चाहिए। - क्लास में एक प्राइवेट फाइनल फील्ड
PlayerRepositoryDB
जोड़ें , इस फील्ड को क्लास कंस्ट्रक्टर में इनिशियलाइज़ करें। गुणों का उपयोग सामान्य कार्यों में करें (हम MySQL डेटाबेस संस्करण 8 के साथ काम करेंगे)। दिलचस्प से - जोड़ेंSessionFactory sessionFactory
यह आपको मैन्युअल रूप से (या एक एसक्यूएल स्क्रिप्ट के निष्पादन के माध्यम से) तालिका बनाने की अनुमति नहीं देगा।properties.put(Environment.HBM2DDL_AUTO, "update");
- सभी वर्ग विधियों को लागू करें। एक बदलाव के लिए, आइए यह करें:
getAll
के माध्यम से विधि को लागू करेंNativeQuery
getAllCount
के माध्यम से विधि को लागू करेंNamedQuery
- विधि में
beforeStop
, ysessionFactory
विधि को कॉल करेंclose
। विधि पर एक एनोटेशन होने से@PreDestroy
, एप्लिकेशन को रोकने से पहले स्प्रिंग इस विधि को कॉल करेगा, और यह आपको सभी सिस्टम संसाधनों को वैध रूप से जारी करने की अनुमति देगा। - अन्य तरीकों का कार्यान्वयन आप पर निर्भर है। लेकिन लेन-देन के बारे में मत भूलना और उन तरीकों के लिए प्रतिबद्ध है जो किसी तरह डेटाबेस की सामग्री को बदलते हैं।
- एप्लिकेशन लॉन्च करें। यदि आपने सब कुछ ठीक किया, तो आपको एक कार्यशील आवेदन मिलेगा। लेकिन वहां कोई डेटा नहीं है, इसलिए कार्यक्षेत्र के माध्यम से init.sql स्क्रिप्ट (संसाधनों से) चलाएं ताकि वे दिखाई दें। उसके बाद ब्राउज़र में F5 दबाएं और जांचें कि आपने सभी तरीकों को सही तरीके से लागू किया है।
- यह देखना दिलचस्प होगा कि वास्तव में हाइबरनेट किन प्रश्नों को निष्पादित करता है, तो चलिए क्वेरी लॉगिंग जोड़ते हैं। ऐसा करने के लिए, p6spy:p6spy:3.9.1 निर्भरता को pom.xml में जोड़ें । संसाधन फ़ोल्डर में, एक फ़ाइल बनाएं spy.properties , जिसमें निर्दिष्ट करें:
और PlayerRepositoryDB वर्ग के निर्माता में, दो विकल्प बदलें: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
अब प्रत्येक अनुरोध के लिए सर्वर आउटपुट में आपको 2 लाइनें दिखाई देंगी। पहला यह है कि कौन सा कथन तैयार किया गया है, दूसरा सम्मिलित मापदंडों के साथ क्वेरी है।properties.put(Environment.DRIVER, "com.p6spy.engine.spy.P6SpyDriver"); properties.put(Environment.URL, "jdbc:p6spy:mysql://localhost:3306/rpg");
बस इतना ही, प्रोजेक्ट तैयार है, बधाई हो!
वास्तव में, स्प्रिंग से हाइबरनेट के साथ काम करना एक अलग दृष्टिकोण का उपयोग करता है, जिसे हम पांचवें मॉड्यूल में शामिल करेंगे।
परियोजना विश्लेषण।
GO TO FULL VERSION