Sunucu API'si için bir rpg yönetici paneli uygulamanın gerekli olduğu, ön uçtaki üçüncü modüldeki projeyi hatırlıyor musunuz? Hatırlayan varsa, sunucuda depolama olarak bir harita kullanılıyordu. Doğal olarak gerçek hayatta bu tür depolar kullanılmaz, veritabanları kullanılır. Bu projenin amacı Hibernate kullanarak alternatif bir depo katmanı uygulaması yazmak olacaktır.

Bunun için ihtiyacınız var:

  1. Bir havuzdan çatal
  2. Projenizin sürümünü bilgisayarınıza indirin.
  3. pom.xml dosyasına bağımlılıklar ekleyin:
    • mysql:mysql-connector-java:8.0.30
    • org.hibernate: hibernate-core-jakarta: 5.6.11.Final
  4. Bir maven yapısı yapın (mvn temiz kurulum). Bir değişiklik için Java sürüm 1.8 kullanıyoruz.
  5. Fikir aracılığıyla başlatma yapılandırması ekleyin. Bu öğenin uygulaması https://codegym.cc/quests/lectures/cgu.module3.lecture02 (öğe 4) dersinde bulunabilir . Tek fark, eser için farklı bir addır. Her şeyi doğru yaptıysanız ve uygulamayı başlattıysanız, şöyle bir şey göreceksiniz:
  6. Workbench'te rpg şeması oluşturma komut dosyasını çalıştırın:
    CREATE SCHEMA `rpg` ;
    
  7. isteğe bağlı Hangi davranışın beklendiğini görmek istiyorsanız, yapıcı parametresindeki sınıftaki "db"com.game.service.PlayerService olan ek açıklama değerini "bellek" olarak @Qualifierdeğiştirebilirsiniz . Bu durumda Spring , . Testten sonra açıklama değerini tekrar "db" olarak değiştirmeyi unutmayın .IPlayerRepositoryPlayerRepositoryMemory@Qualifier
  8. Varlık sınıfındaki tüm gerekli ek açıklamaları düzenleyin com.game.entity.Player. Tablo "player", şema "rpg" olarak adlandırılmalıdır. Numaralandırmalar için ek @Enumerated(EnumType.ORDINAL)açıklamaya ek olarak kullanın @Column. İsim alanının uzunluğunun en fazla 12 karakter, başlık alanının ise en fazla 30 karakter olması gerektiğini hatırlatmama izin verin. Kesinlikle tüm alanlar boş olmamalıdır.
  9. Sınıfta özel bir son alan PlayerRepositoryDBekleyin , bu alanı sınıf yapıcısında başlatın. Özellikleri normal görevlerde olduğu gibi kullanın (MySQL veritabanı sürüm 8 ile çalışacağız). İlginç olandan - ekle SessionFactory sessionFactory
    properties.put(Environment.HBM2DDL_AUTO, "update");
    
    Bu, manuel olarak (veya bir sql betiğinin yürütülmesi yoluyla) bir tablo oluşturmanıza izin vermez.
  10. Tüm sınıf yöntemlerini uygulayın. Bir değişiklik için şunu yapalım:
    • Yöntemi getAllaracılığıyla uygulayınNativeQuery
    • Yöntemi getAllCountaracılığıyla uygulayınNamedQuery
    • Yöntemde beforeStop, y sessionFactoryyöntemini çağırın close. Yöntem üzerinde bir açıklama alarak @PreDestroy, Spring, uygulamayı durdurmadan önce bu yöntemi çağıracak ve bu, tüm sistem kaynaklarını geçerli bir şekilde serbest bırakmanıza izin verecektir.
    • Diğer yöntemlerin uygulanması size kalmış. Ancak, veritabanının içeriğini bir şekilde değiştiren yöntemler için işlemleri ve taahhütleri unutmayın.
  11. Uygulamayı başlat. Her şeyi doğru yaptıysanız, çalışan bir uygulama alacaksınız. Ancak orada veri yok, bu nedenle init.sql betiğini (kaynaklardan) Workbench aracılığıyla çalıştırın, böylece görünürler. Bundan sonra, tarayıcıda F5'e basın ve tüm yöntemleri doğru uyguladığınızı kontrol edin.
  12. Hibernate'in tam olarak hangi sorguları yürüttüğünü görmek ilginç olurdu, bu yüzden sorgu günlüğünü ekleyelim. Bunu yapmak için p6spy:p6spy:3.9.1 bağımlılığını pom.xml dosyasına ekleyin . Kaynaklar klasöründe, spy.properties adlı bir dosya oluşturun ve içinde şunları belirtin:
    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
    
    Ve PlayerRepositoryDB sınıfının yapıcısında iki seçeneği değiştirin:
    properties.put(Environment.DRIVER, "com.p6spy.engine.spy.P6SpyDriver");
    properties.put(Environment.URL, "jdbc:p6spy:mysql://localhost:3306/rpg");
    
    Şimdi sunucu çıktısında her istek için 2 satır göreceksiniz. Birincisi hangi ifadenin hazırlandığı, ikincisi ise girilen parametrelerle sorgu.

Hepsi bu kadar, proje hazır, tebrikler!

Aslında, Spring'ten Hibernate ile çalışmak, beşinci modülde ele alacağımız farklı bir yaklaşım kullanır.


Proje analizi.