Hãy nhớ dự án từ mô-đun thứ ba trên giao diện người dùng, nơi cần triển khai bảng quản trị rpg cho API máy chủ? Nếu ai đó còn nhớ, một bản đồ đã được sử dụng làm nơi lưu trữ trên máy chủ. Đương nhiên, trong cuộc sống thực, những kho lưu trữ như vậy không được sử dụng mà sử dụng cơ sở dữ liệu. Mục tiêu của dự án này là viết một triển khai lớp kho lưu trữ thay thế bằng Hibernate.

Đối với điều này, bạn cần:

  1. Ngã ba từ một kho lưu trữ
  2. Tải phiên bản dự án về máy tính của bạn.
  3. Thêm phụ thuộc vào pom.xml:
    • mysql:mysql-connector-java:8.0.30
    • org.hibernate: hibernate-core-jakarta: 5.6.11.Final
  4. Tạo bản dựng maven (cài đặt sạch mvn). Để thay đổi, chúng tôi sử dụng phiên bản Java 1.8.
  5. Thêm cấu hình khởi chạy qua Idea. Việc triển khai mục này có thể được tìm thấy trong bài giảng https://codegym.cc/quests/lectures/cgu.module3.lecture02 (mục 4). Sự khác biệt duy nhất là một tên khác cho hiện vật. Nếu bạn đã làm đúng mọi thứ và khởi chạy ứng dụng, bạn sẽ thấy một cái gì đó như thế này:
  6. Chạy tập lệnh tạo lược đồ rpg trong Workbench:
    CREATE SCHEMA `rpg` ;
    
  7. Tùy chọn . Nếu bạn muốn xem hành vi nào được mong đợi, bạn có thể thay đổi com.game.service.PlayerServicegiá trị chú thích từ “db” thành “bộ nhớ” trong lớp trong tham số hàm tạo . Trong trường hợp này, Spring sẽ sử dụng phương thức . Sau khi kiểm tra, đừng quên thay đổi lại giá trị chú thích thành "db" .@QualifierIPlayerRepositoryPlayerRepositoryMemory@Qualifier
  8. Sắp xếp tất cả các chú thích cần thiết trong lớp thực thể com.game.entity.Player. Bảng nên được đặt tên là "player", lược đồ "rpg". Đối với enams, hãy sử dụng @Enumerated(EnumType.ORDINAL)ngoài chú thích @Column. Hãy để tôi nhắc bạn rằng độ dài của trường tên phải lên tới 12 ký tự, trường tiêu đề - tối đa 30 ký tự. Tuyệt đối tất cả các trường không được rỗng.
  9. PlayerRepositoryDBThêm một trường cuối cùng riêng tư trong lớp SessionFactory sessionFactory, khởi tạo trường này trong hàm tạo của lớp. Sử dụng các thuộc tính như trong các tác vụ bình thường (chúng ta sẽ làm việc với cơ sở dữ liệu MySQL phiên bản 8). Từ thú vị - thêm
    properties.put(Environment.HBM2DDL_AUTO, "update");
    
    Điều này sẽ cho phép bạn không tạo bảng theo cách thủ công (hoặc thông qua việc thực thi tập lệnh sql).
  10. Thực hiện tất cả các phương pháp lớp. Để thay đổi, hãy làm điều này:
    • Thực hiện phương pháp getAllthông quaNativeQuery
    • Thực hiện phương pháp getAllCountthông quaNamedQuery
    • Trong phương thức , hãy gọi phương thức beforeStopy . Bằng cách có chú thích trên phương thức , Spring sẽ gọi phương thức này trước khi dừng ứng dụng và điều này sẽ cho phép bạn giải phóng tất cả tài nguyên hệ thống một cách hợp lệ.sessionFactoryclose@PreDestroy
    • Việc thực hiện các phương pháp khác là tùy thuộc vào bạn. Nhưng đừng quên các giao dịch và cam kết cho các phương thức bằng cách nào đó thay đổi nội dung của cơ sở dữ liệu.
  11. Chạy chương trình. Nếu bạn đã làm đúng mọi thứ, bạn sẽ nhận được một ứng dụng đang hoạt động. Nhưng không có dữ liệu ở đó, vì vậy hãy chạy tập lệnh init.sql (từ tài nguyên) thông qua Bàn làm việc để chúng xuất hiện. Sau đó, nhấn F5 trong trình duyệt và kiểm tra xem bạn đã thực hiện đúng tất cả các phương pháp chưa.
  12. Sẽ rất thú vị khi xem chính xác những truy vấn mà Hibernate thực thi, vì vậy hãy thêm ghi nhật ký truy vấn. Để thực hiện việc này, hãy thêm phần phụ thuộc p6spy:p6spy:3.9.1 vào pom.xml . Trong thư mục tài nguyên, tạo một tệp spy.properties , trong đó chỉ định:
    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
    
    Và trong hàm tạo của lớp PlayerRepositoryDB, hãy thay đổi hai tùy chọn:
    properties.put(Environment.DRIVER, "com.p6spy.engine.spy.P6SpyDriver");
    properties.put(Environment.URL, "jdbc:p6spy:mysql://localhost:3306/rpg");
    
    Bây giờ trong đầu ra của máy chủ cho mỗi yêu cầu, bạn sẽ thấy 2 dòng. Đầu tiên là câu lệnh nào được chuẩn bị, thứ hai là truy vấn với các tham số được chèn.

Vậy là xong, dự án đã sẵn sàng, xin chúc mừng!

Trên thực tế, làm việc với Hibernate từ Spring sử dụng một cách tiếp cận khác mà chúng tôi sẽ trình bày trong mô-đun thứ năm.


Phân tích dự án.