จำโครงการจากโมดูลที่สามในส่วนหน้าซึ่งจำเป็นต้องติดตั้งแผงผู้ดูแลระบบ rpg สำหรับ API ของเซิร์ฟเวอร์หรือไม่ หากใครจำได้ แผนที่ถูกใช้เป็นที่เก็บข้อมูลบนเซิร์ฟเวอร์ โดยปกติแล้วในชีวิตจริงจะไม่มีการใช้ที่เก็บข้อมูลดังกล่าว แต่ใช้ฐานข้อมูล เป้าหมายของโครงการนี้คือการเขียนการใช้งานเลเยอร์พื้นที่เก็บข้อมูลสำรองโดยใช้ Hibernate
สำหรับสิ่งนี้คุณต้อง:
- แยกจากที่เก็บ
- ดาวน์โหลดเวอร์ชันของโครงการลงในคอมพิวเตอร์ของคุณ
- เพิ่มการพึ่งพาเพื่อ pom.xml:
- mysql:mysql-connector-java:8.0.30
- org.hibernate: hibernate-core-jakarta: 5.6.11.Final
- สร้าง maven build (mvn clean install) สำหรับการเปลี่ยนแปลง เราใช้ Java เวอร์ชัน 1.8
- เพิ่มการกำหนดค่าการเปิดตัวผ่าน Idea การใช้งานรายการนี้สามารถพบได้ในการบรรยายhttps://codegym.cc/quests/lectures/cgu.module3.lecture02 (รายการที่ 4) ข้อแตกต่างเพียงอย่างเดียวคือชื่อที่แตกต่างกันสำหรับสิ่งประดิษฐ์ หากคุณทำทุกอย่างถูกต้องและเปิดแอปพลิเคชัน คุณจะเห็นสิ่งนี้:
- รันสคริปต์การสร้างสกีมา rpg ใน Workbench:
CREATE SCHEMA `rpg` ;
- ตัวเลือก หากคุณต้องการดูลักษณะการทำงานที่คาดหวัง คุณสามารถเปลี่ยน
com.game.service.PlayerService
ค่าคำอธิบายประกอบ จาก “db”เป็น“memory” ในคลาสในพารามิเตอร์ตัวสร้าง ในกรณีนี้ Spring จะใช้ไฟล์. หลังการทดสอบ อย่าลืมเปลี่ยนค่าคำอธิบายประกอบกลับเป็น"db"@Qualifier
IPlayerRepository
PlayerRepositoryMemory
@Qualifier
com.game.entity.Player
จัดเรียงคำอธิบายประกอบที่ จำเป็นทั้งหมดในคลาสเอนทิตี ตารางควรมีชื่อว่า "player", schema "rpg" สำหรับการเคลือบ ให้ใช้@Enumerated(EnumType.ORDINAL)
นอกเหนือจากคำอธิบาย@Column
ประกอบ ฉันขอเตือนคุณว่าความยาวของฟิลด์ชื่อควรมีความยาวสูงสุด 12 อักขระ ฟิลด์ชื่อ - สูงสุด 30 อักขระ ฟิลด์ทั้งหมดต้องไม่เป็นโมฆะโดยเด็ดขาดPlayerRepositoryDB
เพิ่มฟิลด์สุดท้ายส่วนตัวในคลาสSessionFactory sessionFactory
เริ่มต้นฟิลด์นี้ในตัวสร้างคลาส ใช้คุณสมบัติเหมือนงานทั่วไป (เราจะทำงานกับฐานข้อมูล MySQL รุ่น 8) จากที่น่าสนใจ - เพิ่ม
สิ่งนี้จะช่วยให้คุณไม่ต้องสร้างตารางด้วยตนเอง (หรือผ่านการดำเนินการของสคริปต์ sql)properties.put(Environment.HBM2DDL_AUTO, "update");
- ใช้วิธีการเรียนทั้งหมด สำหรับการเปลี่ยนแปลง ลองทำดังนี้
- ใช้ วิธี การ
getAll
ผ่านทางNativeQuery
- ใช้ วิธี การ
getAllCount
ผ่านทางNamedQuery
- ในเมธอด
beforeStop
เรียกsessionFactory
เมธอดclose
y ด้วยการใส่คำอธิบายประกอบในเมธอด@PreDestroy
Spring จะเรียกเมธอดนี้ก่อนที่จะหยุดแอ็พพลิเคชัน ซึ่งจะทำให้คุณสามารถรีลีสรีซอร์สระบบทั้งหมดได้อย่างถูกต้อง - การดำเนินการตามวิธีการอื่นนั้นขึ้นอยู่กับคุณ แต่อย่าลืมเกี่ยวกับการทำธุรกรรมและยอมรับวิธีการที่เปลี่ยนแปลงเนื้อหาของฐานข้อมูล
- เปิดแอปพลิเคชัน หากคุณทำทุกอย่างถูกต้อง คุณจะได้รับใบสมัครที่ใช้งานได้ แต่ไม่มีข้อมูล ดังนั้นให้รัน สคริปต์ init.sql (จากทรัพยากร) ผ่าน Workbench เพื่อให้ปรากฏขึ้น หลังจากนั้นให้กด F5 ในเบราว์เซอร์และตรวจสอบว่าคุณได้ใช้วิธีการทั้งหมดอย่างถูกต้อง
- มันน่าสนใจที่จะดูว่า Hibernate รันคำสั่งใด ดังนั้นเรามาเพิ่มการบันทึกแบบสอบถามกัน เมื่อต้องการทำเช่นนี้ ให้เพิ่ม การพึ่งพา 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");
เพียงเท่านี้โครงการก็พร้อมแล้ว ขอแสดงความยินดี!
ในความเป็นจริง การทำงานกับ Hibernate จาก Spring ใช้วิธีการที่แตกต่างออกไป ซึ่งเราจะกล่าวถึงในโมดูลที่ห้า
การวิเคราะห์โครงการ
GO TO FULL VERSION