서버 API용 rpg 관리자 패널을 구현하는 데 필요한 프런트엔드의 세 번째 모듈에서 프로젝트를 기억하십니까? 누군가 기억한다면 서버의 저장소로 맵이 사용되었습니다. 당연히 실생활에서는 이러한 저장소가 사용되지 않고 데이터베이스가 사용됩니다. 이 프로젝트의 목표는 Hibernate를 사용하여 대체 저장소 계층 구현을 작성하는 것입니다.

이를 위해서는 다음이 필요합니다.

  1. 저장소에서 포크
  2. 프로젝트 버전을 컴퓨터에 다운로드합니다.
  3. pom.xml에 종속성을 추가합니다.
    • mysql:mysql-connector-java:8.0.30
    • org.hibernate: hibernate-core-jakarta: 5.6.11.Final
  4. Maven 빌드를 만듭니다(mvn clean install). 변경을 위해 Java 버전 1.8을 사용합니다.
  5. Idea를 통해 시작 구성을 추가합니다. 이 항목의 구현은 강의 https://codegym.cc/quests/lectures/cgu.module3.lecture02 (항목 4)에서 찾을 수 있습니다. 유일한 차이점은 아티팩트의 다른 이름입니다. 모든 작업을 올바르게 수행하고 응용 프로그램을 실행하면 다음과 같은 내용이 표시됩니다.
  6. Workbench에서 rpg 스키마 생성 스크립트를 실행합니다.
    CREATE SCHEMA `rpg` ;
    
  7. 선택적 . 예상되는 동작을 확인하려면 생성자 매개변수의 클래스에서 com.game.service.PlayerService주석 값을 "db" 에서 "memory"@Qualifier변경할 수 있습니다 . 이 경우 Spring 은 . 테스트 후 주석 값을 다시 "db" 로 변경하는 것을 잊지 마십시오 .IPlayerRepositoryPlayerRepositoryMemory@Qualifier
  8. 엔티티 클래스에 필요한 모든 주석을 정렬합니다 com.game.entity.Player. 테이블 이름은 "player", 스키마는 "rpg"여야 합니다. enams의 경우 @Enumerated(EnumType.ORDINAL)주석 외에 추가로 사용하십시오 @Column. 이름 필드의 길이는 최대 12자, 제목 필드는 최대 30자여야 합니다. 절대적으로 모든 필드는 null이 아니어야 합니다.
  9. 클래스에 private final 필드를 PlayerRepositoryDB추가하고 클래스 생성자에서 이 필드를 초기화합니다. 일반 작업에서와 같이 속성을 사용합니다(MySQL 데이터베이스 버전 8에서 작업함). 흥미로운 것에서 - 추가 SessionFactory sessionFactory
    properties.put(Environment.HBM2DDL_AUTO, "update");
    
    이렇게 하면 수동으로(또는 SQL 스크립트 실행을 통해) 테이블을 생성할 수 없습니다.
  10. 모든 클래스 메서드를 구현합니다. 변경하려면 다음과 같이 합시다.
    • 방법을 getAll통해 구현NativeQuery
    • 방법을 getAllCount통해 구현NamedQuery
    • 메서드에서 beforeStopy sessionFactory메서드를 호출합니다 close. 메서드에 대한 주석을 가짐으로써 @PreDestroySpring은 애플리케이션을 중지하기 전에 이 메서드를 호출할 것이며 이를 통해 모든 시스템 리소스를 유효하게 해제할 수 있습니다.
    • 다른 방법의 구현은 귀하에게 달려 있습니다. 그러나 어떻게든 데이터베이스의 내용을 변경하는 메서드에 대한 트랜잭션 및 커밋을 잊지 마십시오.
  11. 응용 프로그램을 시작하십시오. 모든 것을 올바르게 수행했다면 제대로 작동하는 응용 프로그램을 얻게 될 것입니다. 그러나 거기에는 데이터가 없으므로 Workbench를 통해 init.sql 스크립트(리소스에서)를 실행하여 표시되도록 합니다. 그런 다음 브라우저에서 F5를 누르고 모든 방법을 올바르게 구현했는지 확인하십시오.
  12. Hibernate가 실행하는 쿼리를 정확히 보는 것이 흥미로울 것이므로 쿼리 로깅을 추가해 봅시다. 이렇게 하려면 pom.xml 에 p6spy:p6spy:3.9.1 종속성을 추가합니다 . 리소스 폴더에서 다음을 지정하는 spy.properties 파일을 만듭니다.
    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
    
    그리고 PlayerRepositoryDB 클래스의 생성자에서 두 가지 옵션을 변경합니다.
    properties.put(Environment.DRIVER, "com.p6spy.engine.spy.P6SpyDriver");
    properties.put(Environment.URL, "jdbc:p6spy:mysql://localhost:3306/rpg");
    
    이제 각 요청에 대한 서버 출력에 2줄이 표시됩니다. 첫 번째는 준비된 문이고 두 번째는 매개변수가 삽입된 쿼리입니다.

프로젝트가 준비되었습니다. 축하합니다!

실제로 Spring에서 Hibernate로 작업하는 것은 다른 접근 방식을 사용하며, 이에 대해서는 다섯 번째 모듈에서 다룰 것입니다.


프로젝트 분석.