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:
- Garpu dari repositori
- Unduh versi proyek Anda ke komputer Anda.
- Tambahkan dependensi ke pom.xml:
- mysql:mysql-connector-java:8.0.30
- org.hibernate: hibernate-core-jakarta: 5.6.11.Final
- Buat maven build (mvn clean install). Untuk perubahan, kami menggunakan Java versi 1.8.
- 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:
- Jalankan skrip pembuatan skema rpg di Workbench:
CREATE SCHEMA `rpg` ;
- Opsional . Jika Anda ingin melihat perilaku apa yang diharapkan, Anda dapat mengubah
com.game.service.PlayerService
nilai 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" .@Qualifier
IPlayerRepository
PlayerRepositoryMemory
@Qualifier
- 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. PlayerRepositoryDB
Tambahkan bidang final pribadi di kelasSessionFactory 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
Ini akan memungkinkan Anda untuk tidak membuat tabel secara manual (atau melalui eksekusi skrip sql).properties.put(Environment.HBM2DDL_AUTO, "update");
- Terapkan semua metode kelas. Untuk perubahan, mari kita lakukan ini:
- Menerapkan metode
getAll
melaluiNativeQuery
- Menerapkan metode
getAllCount
melaluiNamedQuery
- Dalam metode , panggil metode
beforeStop
y . 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.sessionFactory
close
@PreDestroy
- Implementasi metode lain terserah Anda. Tapi jangan lupa tentang transaksi dan komit untuk metode yang entah bagaimana mengubah isi database.
- 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.
- 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:
Dan di konstruktor kelas PlayerRepositoryDB, ubah dua opsi: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
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.properties.put(Environment.DRIVER, "com.p6spy.engine.spy.P6SpyDriver"); properties.put(Environment.URL, "jdbc:p6spy:mysql://localhost:3306/rpg");
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.
GO TO FULL VERSION