還記得前端第三個模塊的項目嗎,它需要為服務器 API 實現一個 rpg 管理面板?如果有人記得,地圖被用作服務器上的存儲。自然,在現實生活中,不會使用這樣的存儲,而是使用數據庫。這個項目的目標是使用 Hibernate 編寫一​​個替代的存儲庫層實現。

為此你需要:

  1. 從存儲庫中分叉
  2. 將您的項目版本下載到您的計算機。
  3. 在 pom.xml 中添加依賴:
    • mysql:mysql-connector-java:8.0.30
    • org.hibernate:hibernate-core-jakarta:5.6.11.Final
  4. 進行 Maven 構建(mvn 全新安裝)。為了進行更改,我們使用 Java 1.8 版。
  5. 通過 Idea 添加啟動配置。此項的實現可以在講座https://codegym.cc/quests/lectures/cgu.module3.lecture02(第4項)中找到。唯一的區別是工件的名稱不同。如果一切正常並啟動應用程序,您將看到如下內容:
  6. 在 Workbench 中運行 rpg 模式創建腳本:
    CREATE SCHEMA `rpg` ;
    
  7. 可選。如果您想查看預期的行為,可以在構造函數參數的類中將com.game.service.PlayerService註釋值從“db”@Qualifier更改為“memory”。在這種情況下,Spring 將使用. 測試後,不要忘記將註釋值改回"db"IPlayerRepositoryPlayerRepositoryMemory@Qualifier
  8. 在實體類中安排所有必要的註解com.game.entity.Player。該表應命名為“player”,模式為“rpg”。@Enumerated(EnumType.ORDINAL)對於 enams,除了註釋之外還使用@Column。讓我提醒您,名稱字段的長度最多應為 12 個字符,標題字段最多應為 30 個字符。絕對所有字段都不能為空。
  9. 在類中PlayerRepositoryDB添加一個private final字段SessionFactory sessionFactory,在類構造函數中初始化這個字段。像在正常任務中一樣使用屬性(我們將使用 MySQL 數據庫版本 8)。從有趣-添加
    properties.put(Environment.HBM2DDL_AUTO, "update");
    
    這將允許您不手動創建表(或通過執行 sql 腳本)。
  10. 實現所有類方法。為了改變,讓我們這樣做:
    • 實現方法getAll通過NativeQuery
    • 實現方法getAllCount通過NamedQuery
    • 在方法中beforeStop,調用 ysessionFactory方法close。通過對該方法進行註解@PreDestroy,Spring 將在停止應用程序之前調用該方法,這將允許您有效地釋放所有系統資源。
    • 其他方法的實現由您決定。但是不要忘記以某種方式更改數據庫內容的方法的事務和提交。
  11. 啟動應用程序。如果您做的一切都正確,您將獲得一個可以工作的應用程序。但是那裡沒有數據,所以通過 Workbench運行init.sql腳本(來自資源)以便它們出現。之後,在瀏覽器中按 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 行。第一個是準備什麼語句,第二個是帶有插入參數的查詢。

就這樣,項目準備好了,恭喜!

事實上,從 Spring 使用 Hibernate 使用不同的方法,我們將在第五個模塊中介紹。


項目分析。