Ingat projek daripada modul ketiga pada bahagian hadapan, di mana perlu untuk melaksanakan panel pentadbir rpg untuk API pelayan? Jika ada yang masih ingat, peta telah digunakan sebagai storan pada pelayan. Sememangnya, dalam kehidupan sebenar, storan sedemikian tidak digunakan, tetapi pangkalan data digunakan. Matlamat projek ini adalah untuk menulis pelaksanaan lapisan repositori alternatif menggunakan Hibernate.
Untuk ini anda perlukan:
- Garpu dari repositori
- Muat turun versi projek anda ke komputer anda.
- Tambahkan kebergantungan pada pom.xml:
- mysql:mysql-connector-java:8.0.30
- org.hibernate: hibernate-core-jakarta: 5.6.11.Final
- Buat binaan maven (mvn clean install). Untuk perubahan, kami menggunakan Java versi 1.8.
- Tambah konfigurasi pelancaran melalui Idea. Pelaksanaan item ini boleh didapati dalam kuliah https://codegym.cc/quests/lectures/cgu.module3.lecture02 (item 4). Satu-satunya perbezaan ialah nama yang berbeza untuk artifak itu. Jika anda melakukan semuanya dengan betul dan melancarkan aplikasi, anda akan melihat sesuatu seperti ini:
- Jalankan skrip penciptaan skema rpg dalam Workbench:
CREATE SCHEMA `rpg` ;
- Pilihan . Jika anda ingin melihat tingkah laku yang dijangkakan, anda boleh menukar
com.game.service.PlayerService
nilai anotasi daripada "db" kepada "memori" dalam kelas dalam parameter pembina . Dalam kes ini, Spring akan menggunakan . Selepas ujian, jangan lupa untuk menukar nilai anotasi kembali kepada "db" .@Qualifier
IPlayerRepository
PlayerRepositoryMemory
@Qualifier
- Susun semua anotasi yang diperlukan dalam kelas entiti
com.game.entity.Player
. Jadual harus dinamakan "pemain", skema "rpg". Untuk enam, gunakan@Enumerated(EnumType.ORDINAL)
sebagai tambahan kepada anotasi@Column
. Biar saya ingatkan anda bahawa panjang medan nama hendaklah sehingga 12 aksara, medan tajuk - sehingga 30 aksara. Semestinya semua medan mestilah tidak batal. PlayerRepositoryDB
Tambah medan akhir peribadi dalam kelasSessionFactory sessionFactory
, mulakan medan ini dalam pembina kelas. Gunakan sifat seperti dalam tugas biasa (kami akan bekerja dengan pangkalan data MySQL versi 8). Dari menarik - tambah
Ini akan membolehkan anda tidak membuat jadual secara manual (atau melalui pelaksanaan skrip sql).properties.put(Environment.HBM2DDL_AUTO, "update");
- Laksanakan semua kaedah kelas. Untuk perubahan, mari lakukan ini:
- Laksanakan kaedah
getAll
melaluiNativeQuery
- Laksanakan kaedah
getAllCount
melaluiNamedQuery
- Dalam kaedah , panggil kaedah
beforeStop
y . Dengan mempunyai anotasi pada kaedah , Spring akan memanggil kaedah ini sebelum menghentikan aplikasi, dan ini akan membolehkan anda melepaskan semua sumber sistem secara sah.sessionFactory
close
@PreDestroy
- Pelaksanaan kaedah lain terpulang kepada anda. Tetapi jangan lupa tentang transaksi dan komitmen untuk kaedah yang entah bagaimana mengubah kandungan pangkalan data.
- Lancarkan aplikasi. Jika anda melakukan semuanya dengan betul, anda akan mendapat aplikasi yang berfungsi. Tetapi tiada data di sana, jadi jalankan skrip init.sql (dari sumber) melalui Meja Kerja supaya ia muncul. Selepas itu, tekan F5 dalam penyemak imbas dan semak sama ada anda telah melaksanakan semua kaedah dengan betul.
- Menarik untuk melihat dengan tepat pertanyaan apa yang Hibernate laksanakan, jadi mari tambah pengelogan pertanyaan. Untuk melakukan ini, tambahkan kebergantungan p6spy:p6spy:3.9.1 pada pom.xml . Dalam folder sumber, cipta fail spy.properties , yang menyatakan:
Dan dalam pembina kelas PlayerRepositoryDB, tukar dua pilihan: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 dalam output pelayan untuk setiap permintaan anda akan melihat 2 baris. Yang pertama ialah pernyataan yang disediakan, yang kedua ialah pertanyaan dengan parameter yang dimasukkan.properties.put(Environment.DRIVER, "com.p6spy.engine.spy.P6SpyDriver"); properties.put(Environment.URL, "jdbc:p6spy:mysql://localhost:3306/rpg");
Itu sahaja, projek sudah siap, tahniah!
Malah, bekerja dengan Hibernate dari Spring menggunakan pendekatan berbeza, yang akan kami bincangkan dalam modul kelima.
Analisis projek.
GO TO FULL VERSION