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:

  1. Garpu dari repositori
  2. Muat turun versi projek anda ke komputer anda.
  3. Tambahkan kebergantungan pada pom.xml:
    • mysql:mysql-connector-java:8.0.30
    • org.hibernate: hibernate-core-jakarta: 5.6.11.Final
  4. Buat binaan maven (mvn clean install). Untuk perubahan, kami menggunakan Java versi 1.8.
  5. 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:
  6. Jalankan skrip penciptaan skema rpg dalam Workbench:
    CREATE SCHEMA `rpg` ;
    
  7. Pilihan . Jika anda ingin melihat tingkah laku yang dijangkakan, anda boleh menukar com.game.service.PlayerServicenilai 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" .@QualifierIPlayerRepositoryPlayerRepositoryMemory@Qualifier
  8. 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.
  9. PlayerRepositoryDBTambah medan akhir peribadi dalam kelas SessionFactory 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
    properties.put(Environment.HBM2DDL_AUTO, "update");
    
    Ini akan membolehkan anda tidak membuat jadual secara manual (atau melalui pelaksanaan skrip sql).
  10. Laksanakan semua kaedah kelas. Untuk perubahan, mari lakukan ini:
    • Laksanakan kaedah getAllmelaluiNativeQuery
    • Laksanakan kaedah getAllCountmelaluiNamedQuery
    • Dalam kaedah , panggil kaedah beforeStopy . Dengan mempunyai anotasi pada kaedah , Spring akan memanggil kaedah ini sebelum menghentikan aplikasi, dan ini akan membolehkan anda melepaskan semua sumber sistem secara sah.sessionFactoryclose@PreDestroy
    • Pelaksanaan kaedah lain terpulang kepada anda. Tetapi jangan lupa tentang transaksi dan komitmen untuk kaedah yang entah bagaimana mengubah kandungan pangkalan data.
  11. 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.
  12. 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:
    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 dalam pembina kelas PlayerRepositoryDB, tukar dua pilihan:
    properties.put(Environment.DRIVER, "com.p6spy.engine.spy.P6SpyDriver");
    properties.put(Environment.URL, "jdbc:p6spy:mysql://localhost:3306/rpg");
    
    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.

Itu sahaja, projek sudah siap, tahniah!

Malah, bekerja dengan Hibernate dari Spring menggunakan pendekatan berbeza, yang akan kami bincangkan dalam modul kelima.


Analisis projek.