จำโครงการจากโมดูลที่สามในส่วนหน้าซึ่งจำเป็นต้องติดตั้งแผงผู้ดูแลระบบ rpg สำหรับ API ของเซิร์ฟเวอร์หรือไม่ หากใครจำได้ แผนที่ถูกใช้เป็นที่เก็บข้อมูลบนเซิร์ฟเวอร์ โดยปกติแล้วในชีวิตจริงจะไม่มีการใช้ที่เก็บข้อมูลดังกล่าว แต่ใช้ฐานข้อมูล เป้าหมายของโครงการนี้คือการเขียนการใช้งานเลเยอร์พื้นที่เก็บข้อมูลสำรองโดยใช้ Hibernate

สำหรับสิ่งนี้คุณต้อง:

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

เพียงเท่านี้โครงการก็พร้อมแล้ว ขอแสดงความยินดี!

ในความเป็นจริง การทำงานกับ Hibernate จาก Spring ใช้วิธีการที่แตกต่างออกไป ซึ่งเราจะกล่าวถึงในโมดูลที่ห้า


การวิเคราะห์โครงการ