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