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:
- Bir havuzdan çatal
- Projenizin sürümünü bilgisayarınıza indirin.
- 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
- Bir maven yapısı yapın (mvn temiz kurulum). Bir değişiklik için Java sürüm 1.8 kullanıyoruz.
- 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:
- Workbench'te rpg şeması oluşturma komut dosyasını çalıştırın:
CREATE SCHEMA `rpg` ;
- 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@Qualifier
değiştirebilirsiniz . Bu durumda Spring , . Testten sonra açıklama değerini tekrar "db" olarak değiştirmeyi unutmayın .IPlayerRepository
PlayerRepositoryMemory
@Qualifier
- 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. - Sınıfta özel bir son alan
PlayerRepositoryDB
ekleyin , 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 - ekleSessionFactory sessionFactory
Bu, manuel olarak (veya bir sql betiğinin yürütülmesi yoluyla) bir tablo oluşturmanıza izin vermez.properties.put(Environment.HBM2DDL_AUTO, "update");
- Tüm sınıf yöntemlerini uygulayın. Bir değişiklik için şunu yapalım:
- Yöntemi
getAll
aracılığıyla uygulayınNativeQuery
- Yöntemi
getAllCount
aracılığıyla uygulayınNamedQuery
- Yöntemde
beforeStop
, ysessionFactory
yöntemini çağırınclose
. 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.
- 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.
- 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:
Ve PlayerRepositoryDB sınıfının yapıcısında iki seçeneği değiştirin: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
Şimdi sunucu çıktısında her istek için 2 satır göreceksiniz. Birincisi hangi ifadenin hazırlandığı, ikincisi ise girilen parametrelerle sorgu.properties.put(Environment.DRIVER, "com.p6spy.engine.spy.P6SpyDriver"); properties.put(Environment.URL, "jdbc:p6spy:mysql://localhost:3306/rpg");
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.
GO TO FULL VERSION