फ्रंटएंडवरील तिसऱ्या मॉड्यूलमधील प्रकल्प लक्षात ठेवा, जेथे सर्व्हर API साठी आरपीजी प्रशासक पॅनेल लागू करणे आवश्यक होते? जर कोणाला आठवत असेल तर सर्व्हरवर एक नकाशा स्टोरेज म्हणून वापरला होता. स्वाभाविकच, वास्तविक जीवनात, अशा स्टोरेजचा वापर केला जात नाही, परंतु डेटाबेस वापरला जातो. हायबरनेट वापरून पर्यायी रिपॉझिटरी लेयर अंमलबजावणी लिहिणे हे या प्रकल्पाचे ध्येय असेल.
यासाठी आपल्याला आवश्यक आहे:
- एक भांडार पासून काटा
- आपल्या संगणकावर प्रकल्पाची आवृत्ती डाउनलोड करा.
- pom.xml मध्ये अवलंबित्व जोडा:
- mysql:mysql-connector-java:8.0.30
- org.hibernate: hibernate-core-jakarta: 5.6.11.Final
- मॅवेन बिल्ड बनवा (mvn क्लीन इंस्टॉल). बदलासाठी, आम्ही Java आवृत्ती 1.8 वापरतो.
- Idea द्वारे लॉन्च कॉन्फिगरेशन जोडा. या आयटमची अंमलबजावणी व्याख्यान 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
. टेबलला "प्लेअर", स्कीमा "आरपीजी" असे नाव दिले पाहिजे. enams साठी,@Enumerated(EnumType.ORDINAL)
भाष्य व्यतिरिक्त वापरा@Column
. मी तुम्हाला आठवण करून देतो की नाव फील्डची लांबी 12 वर्णांपर्यंत असावी, शीर्षक फील्ड - 30 वर्णांपर्यंत. पूर्णपणे सर्व फील्ड शून्य असू नयेत. - क्लासमध्ये खाजगी अंतिम फील्ड
PlayerRepositoryDB
जोडा , क्लास कन्स्ट्रक्टरमध्ये हे फील्ड सुरू करा. सामान्य कार्यांप्रमाणे गुणधर्म वापरा (आम्ही MySQL डेटाबेस आवृत्ती 8 सह कार्य करू). मनोरंजक पासून - जोडाSessionFactory sessionFactory
हे तुम्हाला टेबल मॅन्युअली तयार न करण्याची परवानगी देईल (किंवा sql स्क्रिप्टच्या अंमलबजावणीद्वारे).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