Ingat proyek dari modul ketiga di frontend, di mana perlu menerapkan panel admin rpg untuk API server? Jika ada yang ingat, peta digunakan sebagai penyimpanan di server. Secara alami, dalam kehidupan nyata, penyimpanan seperti itu tidak digunakan, tetapi database digunakan. Tujuan dari proyek ini adalah untuk menulis implementasi lapisan repositori alternatif menggunakan Hibernate.

Untuk ini, Anda perlu:

  1. Garpu dari repositori
  2. Unduh versi proyek Anda ke komputer Anda.
  3. Tambahkan dependensi ke pom.xml:
    • mysql:mysql-connector-java:8.0.30
    • org.hibernate: hibernate-core-jakarta: 5.6.11.Final
  4. Buat maven build (mvn clean install). Untuk perubahan, kami menggunakan Java versi 1.8.
  5. Tambahkan konfigurasi peluncuran melalui Idea. Implementasi item ini dapat ditemukan di kuliah https://codegym.cc/quests/lectures/cgu.module3.lecture02 (item 4). Satu-satunya perbedaan adalah nama artefak yang berbeda. Jika Anda melakukan semuanya dengan benar dan meluncurkan aplikasi, Anda akan melihat sesuatu seperti ini:
  6. Jalankan skrip pembuatan skema rpg di Workbench:
    CREATE SCHEMA `rpg` ;
    
  7. Opsional . Jika Anda ingin melihat perilaku apa yang diharapkan, Anda dapat mengubah com.game.service.PlayerServicenilai anotasi dari “db” menjadi “memori” di kelas dalam parameter konstruktor . Dalam hal ini, Spring akan menggunakan . Setelah pengujian, jangan lupa untuk mengubah kembali nilai anotasi menjadi "db" .@QualifierIPlayerRepositoryPlayerRepositoryMemory@Qualifier
  8. Atur semua anotasi yang diperlukan di kelas entitas com.game.entity.Player. Tabel tersebut harus diberi nama "pemain", skema "rpg". Untuk enams, gunakan @Enumerated(EnumType.ORDINAL)selain anotasi @Column. Izinkan saya mengingatkan Anda bahwa panjang bidang nama harus hingga 12 karakter, bidang judul - hingga 30 karakter. Benar-benar semua bidang tidak boleh nol.
  9. PlayerRepositoryDBTambahkan bidang final pribadi di kelas SessionFactory sessionFactory, inisialisasi bidang ini di konstruktor kelas. Gunakan properti seperti pada tugas normal (kami akan bekerja dengan database MySQL versi 8). Dari yang menarik - tambahkan
    properties.put(Environment.HBM2DDL_AUTO, "update");
    
    Ini akan memungkinkan Anda untuk tidak membuat tabel secara manual (atau melalui eksekusi skrip sql).
  10. Terapkan semua metode kelas. Untuk perubahan, mari kita lakukan ini:
    • Menerapkan metode getAllmelaluiNativeQuery
    • Menerapkan metode getAllCountmelaluiNamedQuery
    • Dalam metode , panggil metode beforeStopy . Dengan memiliki anotasi pada metode , Spring akan memanggil metode ini sebelum menghentikan aplikasi, dan ini akan memungkinkan Anda untuk melepaskan semua sumber daya sistem secara valid.sessionFactoryclose@PreDestroy
    • Implementasi metode lain terserah Anda. Tapi jangan lupa tentang transaksi dan komit untuk metode yang entah bagaimana mengubah isi database.
  11. Luncurkan aplikasi. Jika Anda melakukan semuanya dengan benar, Anda akan mendapatkan aplikasi yang berfungsi. Tetapi tidak ada data di sana, jadi jalankan skrip init.sql (dari sumber daya) melalui Workbench agar muncul. Setelah itu, tekan F5 di browser dan periksa apakah Anda telah menerapkan semua metode dengan benar.
  12. Akan menarik untuk melihat dengan tepat kueri apa yang dijalankan Hibernate, jadi mari tambahkan pencatatan kueri. Untuk melakukannya, tambahkan dependensi p6spy:p6spy:3.9.1 ke pom.xml . Di folder sumber daya, buat file spy.properties , di mana tentukan:
    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
    
    Dan di konstruktor kelas PlayerRepositoryDB, ubah dua opsi:
    properties.put(Environment.DRIVER, "com.p6spy.engine.spy.P6SpyDriver");
    properties.put(Environment.URL, "jdbc:p6spy:mysql://localhost:3306/rpg");
    
    Sekarang di output server untuk setiap permintaan Anda akan melihat 2 baris. Yang pertama adalah pernyataan apa yang disiapkan, yang kedua adalah kueri dengan parameter yang dimasukkan.

Itu saja, proyek sudah siap, selamat!

Nyatanya, bekerja dengan Hibernate from Spring menggunakan pendekatan yang berbeda, yang akan kita bahas di modul kelima.


Analisis proyek.