ফ্রন্টএন্ডের তৃতীয় মডিউল থেকে প্রজেক্টটি মনে রাখবেন, যেখানে সার্ভার API-এর জন্য একটি rpg অ্যাডমিন প্যানেল বাস্তবায়ন করা প্রয়োজন ছিল? যদি কেউ মনে রাখে, সার্ভারে স্টোরেজ হিসাবে একটি মানচিত্র ব্যবহার করা হয়েছিল। স্বাভাবিকভাবেই, বাস্তব জীবনে, এই ধরনের স্টোরেজ ব্যবহার করা হয় না, কিন্তু ডাটাবেস ব্যবহার করা হয়। এই প্রকল্পের লক্ষ্য হাইবারনেট ব্যবহার করে একটি বিকল্প সংগ্রহস্থল স্তর বাস্তবায়ন লিখতে হবে।
এর জন্য আপনার প্রয়োজন:
- একটি সংগ্রহস্থল থেকে কাঁটা
- আপনার কম্পিউটারে প্রকল্পের আপনার সংস্করণ ডাউনলোড করুন.
- pom.xml-এ নির্ভরতা যোগ করুন:
- mysql:mysql-connector-java: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` ;
- ঐচ্ছিক _ আপনি যদি দেখতে চান কি আচরণ প্রত্যাশিত, আপনি কন্সট্রাক্টর প্যারামিটারে ক্লাসে "db" থেকে "মেমরি"
com.game.service.PlayerService
এ টীকা মান@Qualifier
পরিবর্তন করতে পারেন । এই ক্ষেত্রে, বসন্ত ব্যবহার করবে . পরীক্ষার পরে, টীকা মানটিকে "db" এ পরিবর্তন করতে ভুলবেন না ।IPlayerRepository
PlayerRepositoryMemory
@Qualifier
- সত্তা ক্লাসে সমস্ত প্রয়োজনীয় টীকা সাজান
com.game.entity.Player
। টেবিলের নাম "প্লেয়ার", স্কিমা "আরপিজি" হওয়া উচিত। এনামসের জন্য,@Enumerated(EnumType.ORDINAL)
টীকা ছাড়াও ব্যবহার করুন@Column
। আমি আপনাকে মনে করিয়ে দিই যে নামের ক্ষেত্রের দৈর্ঘ্য 12 অক্ষর পর্যন্ত হওয়া উচিত, শিরোনাম ক্ষেত্র - 30 অক্ষর পর্যন্ত। একেবারে সব ক্ষেত্র শূন্য হতে হবে না. - ক্লাসে একটি ব্যক্তিগত চূড়ান্ত ক্ষেত্র
PlayerRepositoryDB
যোগ করুন , ক্লাস কনস্ট্রাক্টরে এই ক্ষেত্রটি শুরু করুন। স্বাভাবিক কাজের মতো বৈশিষ্ট্যগুলি ব্যবহার করুন (আমরা মাইএসকিউএল ডাটাবেস সংস্করণ 8 এর সাথে কাজ করব)। আকর্ষণীয় থেকে - যোগ করুনSessionFactory sessionFactory
এটি আপনাকে ম্যানুয়ালি একটি টেবিল তৈরি না করার অনুমতি দেবে (বা একটি sql স্ক্রিপ্টের মাধ্যমে)।properties.put(Environment.HBM2DDL_AUTO, "update");
- সমস্ত ক্লাস পদ্ধতি প্রয়োগ করুন। একটি পরিবর্তনের জন্য, আসুন এটি করি:
getAll
এর মাধ্যমে পদ্ধতিটি বাস্তবায়ন করুনNativeQuery
getAllCount
এর মাধ্যমে পদ্ধতিটি বাস্তবায়ন করুনNamedQuery
- পদ্ধতিতে
beforeStop
, ysessionFactory
পদ্ধতিতে কল করুনclose
। পদ্ধতিতে একটি টীকা থাকার মাধ্যমে@PreDestroy
, স্প্রিং অ্যাপ্লিকেশনটি বন্ধ করার আগে এই পদ্ধতিটিকে কল করবে এবং এটি আপনাকে সমস্ত সিস্টেম সংস্থান বৈধভাবে প্রকাশ করার অনুমতি দেবে। - অন্যান্য পদ্ধতির বাস্তবায়ন আপনার উপর নির্ভর করে। তবে লেনদেন এবং পদ্ধতিগুলির জন্য প্রতিশ্রুতি সম্পর্কে ভুলবেন না যা কোনওভাবে ডাটাবেসের বিষয়বস্তু পরিবর্তন করে।
- অ্যাপ্লিকেশন চালু করুন. আপনি যদি সবকিছু ঠিকঠাক করেন তবে আপনি একটি কার্যকরী অ্যাপ্লিকেশন পাবেন। কিন্তু সেখানে কোন তথ্য নেই, তাই ওয়ার্কবেঞ্চের মাধ্যমে init.sql স্ক্রিপ্টটি (সম্পদ থেকে) চালান যাতে সেগুলি উপস্থিত হয়। এর পরে, ব্রাউজারে F5 টিপুন এবং পরীক্ষা করুন যে আপনি সমস্ত পদ্ধতি সঠিকভাবে প্রয়োগ করেছেন।
- হাইবারনেট ঠিক কোন প্রশ্নগুলি সম্পাদন করে তা দেখতে আকর্ষণীয় হবে, তাই আসুন ক্যোয়ারী লগিং যোগ করি। এটি করার জন্য, pom.xml-এ p6spy:p6spy:3.9.1 নির্ভরতা যোগ করুন । সম্পদ ফোল্ডারে, একটি ফাইল তৈরি করুন 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