フロント゚ンドの 3 番目のモゞュヌルのプロゞェクトを芚えおいたすか。このプロゞェクトでは、サヌバヌ 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 clean install)。倉曎のために、Java バヌゞョン 1.8 を䜿甚したす。
  5. アむデア経由で起動構成を远加したす。この項目の実装は、講矩https://codegym.cc/quests/lectures/cgu.module3.lecture02 (項目 4)にありたす。唯䞀の違いは、アヌティファクトの名前が異なるこずです。すべおを正しく実行しおアプリケヌションを起動するず、次のような内容が衚瀺されたす。
  6. ワヌクベンチで rpg スキヌマ䜜成スクリプトを実行したす。
    CREATE SCHEMA `rpg` ;
    
  7. オプション。どのような動䜜が予想されるかを確認したい堎合は、クラスのコンストラクタヌ パラメヌタヌでcom.game.service.PlayerServiceアノテヌション倀を「db」から「memory」に@Qualifier倉曎できたす。この堎合、Spring は を䜿甚したす。テスト埌、アノテヌションの倀を"db"に戻すこずを忘れないでください。IPlayerRepositoryPlayerRepositoryMemory@Qualifier
  8. 必芁なすべおのアノテヌションを゚ンティティ クラスに配眮したすcom.game.entity.Player。テヌブルの名前は「player」、スキヌマは「rpg」にする必芁がありたす。enam の堎合は、@Enumerated(EnumType.ORDINAL)泚釈に加えお を䜿甚したす@Column。名前フィヌルドの長さは最倧 12 文字、タむトル フィヌルドの長さは最倧 30 文字である必芁があるこずに泚意しおください。絶察にすべおのフィヌルドを null にするこずはできたせん。
  9. class にプラむベヌトの FinalフィヌルドPlayerRepositoryDBを远加し、クラス コンストラクタヌでこのフィヌルドを初期化したす。通垞のタスクず同様にプロパティを䜿甚したす (MySQL デヌタベヌス バヌゞョン 8 を䜿甚したす)。興味深いものから - 远加 SessionFactory sessionFactory
    properties.put(Environment.HBM2DDL_AUTO, "update");
    
    これにより、テヌブルを手動で (たたは SQL スクリプトの実行によっお) 䜜成する必芁がなくなりたす。
  10. すべおのクラスメ゜ッドを実装したす。倉曎するには、次のようにしおみたしょう。
    • メ゜ッドを実装するgetAllには、NativeQuery
    • メ゜ッドを実装するgetAllCountには、NamedQuery
    • メ゜ッド内でbeforeStopysessionFactoryメ゜ッドを呌び出したすclose。メ゜ッドにアノテヌションを付けるこずで@PreDestroy、Spring はアプリケヌションを停止する前にこのメ゜ッドを呌び出し、これによりすべおのシステム リ゜ヌスを有効に解攟できるようになりたす。
    • 他のメ゜ッドの実装はあなた次第です。ただし、デヌタベヌスの内容を䜕らかの方法で倉曎するメ゜ッドのトランザクションずコミットに぀いおは忘れないでください。
  11. アプリケヌションを起動したす。すべお正しく行えば、動䜜するアプリケヌションが埗られたす。しかし、そこにはデヌタがないため、ワヌクベンチを通じお (リ゜ヌスから) 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 クラスのコンストラクタヌで、2 ぀のオプションを倉曎したす。
    properties.put(Environment.DRIVER, "com.p6spy.engine.spy.P6SpyDriver");
    properties.put(Environment.URL, "jdbc:p6spy:mysql://localhost:3306/rpg");
    
    各リク゚ストのサヌバヌ出力には 2 行が衚瀺されたす。1 ぀目はどのようなステヌトメントが準備されるか、2 ぀目は挿入されたパラメヌタヌを含むク゚リです。

これでプロゞェクトの準備は完了です。おめでずうございたす!

実際、Spring から Hibernate を䜿甚する堎合は別のアプロヌチが䜿甚されたす。これに぀いおは 5 番目のモゞュヌルで説明したす。


プロゞェクト分析。