5.1 자동 데이터 스키마 생성

Hibernate를 처음 구성할 때 많은 흥미로운 설정을 활성화할 수 있습니다. 살포하지 않기 위해 전에 가져 오지 않았습니다. 그러나 레벨이 끝나면 나는 그들 중 일부에 대해 말할 것이라고 생각합니다.

그러한 첫 번째 설정은 hbm2ddl.auto. 5가지 다른 값을 가질 수 있습니다.

확인 유효성 검사: Hibernate는 열과 필드 이름 및 유형이 데이터베이스와 주석에서 일치하는지 확인합니다. 가장 일반적인 모드입니다.
업데이트 업데이트: Hibernate는 테이블이나 열이 예상과 다른 경우 데이터베이스의 테이블을 업데이트합니다.
만들다 재생성: Hibernate는 데이터베이스의 모든 테이블을 삭제하고 주석의 데이터를 기반으로 다시 생성합니다.
생성 드롭 생성-삭제. 작업 시작 시 Hibernate는 모든 테이블을 생성하고 작업이 끝나면 자체적으로 테이블을 삭제합니다.
없음 Hibernate는 아무 것도 하지 않을 것이다. 베이스가 예상과 일치하지 않는 경우 쿼리 실행 중에 오류가 발생합니다.

5.2 로깅 요청

Hibernate의 두 번째 매우 유용한 설정은 데이터베이스에 대한 모든 요청의 로깅입니다. 데이터베이스에 대한 모든 요청은 콘솔에 복제됩니다. 이는 Hibernate 관련 코드를 변경하는 경우 매우 유용한 기능입니다.

먼저 쿼리가 SQL로 변환되는 방식을 더 잘 이해할 수 있습니다. 둘째, 더 쉽고 일찍 오류를 찾을 수 있습니다. 그리고 그들은 확실히 할 것입니다. 최대 절전 모드는 항상 우리가 기대하는 방식으로 작동하지 않습니다. 이것은 특히 주석과 관련이 있는 경우가 많습니다. 자신의 방식으로 주석을 이해하고 자신의 방식으로 Hibernate를 사용합니다.

로깅을 활성화하는 설정을 이라고 합니다 hibernate.show_sql. 해당 값을 true로 설정하면 데이터베이스에 대한 쿼리가 콘솔에 기록됩니다. hibernate.format_sql이 매개변수는 로그에서 편리한 SQL 쿼리 형식을 설정할 수 있도록 하는 매개변수와 함께 사용되기도 합니다 .

요청을 데이터베이스에 기록하는 또 다른 방법은 표준 로거를 사용하는 것 입니다 . Hibernate가 이미 표준 로거에 쿼리를 작성하지만 DEBUG 범위에서만 모든 것이 제공됩니다. 표준 로거에서 두 가지 속성을 변경해야 합니다.

logging.level.org.hibernate.SQL=debug
logging.level.org.hibernate.type.descriptor.sql.BasicBinder=trace

BasicBinder 의 수준을 로 변경하면 쿼리 trace매개변수가 추가되지만 약간 특이한 형식으로 쿼리 자체 이후에 순차적으로 열거됩니다.

세 번째 방법은 데이터베이스용 특수 프록시 드라이버를 사용하는 것 입니다 .

예를 들어, log4jdbc또는 p6spy. 두 프록시 모두 작동 중이며 스타터가 있지만 log4jdbc작성 시점에 오랫동안 커밋이 없었습니다.


<dependency>
    <groupId>com.integralblue</groupId>
    <artifactId>log4jdbc-spring-boot-starter</artifactId>
</dependency>
<dependency>
    <groupId>com.github.gavlyukovskiy</groupId>
    <artifactId>p6spy-spring-boot-starter</artifactId>
</dependency>

자세한 내용은 다루지 않겠습니다. 이것이 가능하다는 것을 알고 싶습니다.

5.3 SQL 언어

그리고 배경 정보가 더 있습니다.

Hibernate는 매우 많은 수의 DBMS를 지원합니다. 그들 각각은 SQL 함수의 표준 집합과 자체 함수를 구현합니다. 또는 다른 버전의 SQL. 따라서 이러한 DBMS로 작업하려면 사용할 SQL 언어의 방언을 Hibernate에 알려줄 필요가 있습니다.

다음은 가장 인기 있는 방언 목록입니다.

PostgreSQL org.hibernate.dialect.PostgreSQLDialect
SAP DB org.hibernate.dialect.SAPDDBDialect
사이베이스 org.hibernate.dialect.SybaseDialect
인포믹스 org.hibernate.dialect.InformixDialect
마이크로소프트 SQL 서버 2008 org.hibernate.dialect.SQLServer2008Dialect
MySQL org.hibernate.dialect.MySQLDialect
Oracle(모든 버전) org.hibernate.dialect.OracleDialect
오라클 11g org.hibernate.dialect.Oracle10gDialect

물론 그러한 방언은 얼마든지 있을 수 있습니다. 자신의 DBMS와 그것에 대한 자신의 방언을 작성할 수 있습니다.

올바른 방언을 지정하는 것이 왜 중요합니까?

각 데이터베이스는 약간 다른 데이터 유형을 가질 수 있습니다. 따라서 Hibernate가 예상한 대로 완벽하게 작동하려면 사용해야 하는 SQL 언어의 방언을 Hibernate에 알려줄 필요가 있습니다.

다음은 실제로 모든 것이 어떻게 연결되어 있는지 보여주는 흥미로운 그림입니다.

5.4 인기 있는 설정

삶을 더 쉽게 만들기 위해 몇 가지 설정의 전체 목록은 다음과 같습니다.

MySQL 8.0
hibernate.dialect=org.hibernate.dialect.MySQL8Dialect
hibernate.connection.driver_class=com.mysql.cj.jdbc.Driver
hibernate.connection.url=jdbc:mysql://localhost:3306/test
hibernate.connection.username=root
hibernate.connection.password=secret
hibernate.show_sql=true
hibernate.hbm2ddl=validate
MySQL 5.0
hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
hibernate.connection.driver_class=com.mysql.jdbc.Driver
hibernate.connection.url=jdbc:mysql://localhost:3306/test
hibernate.connection.username=root
hibernate.connection.password=secret
hibernate.show_sql=true
hibernate.hbm2ddl=validate
PostgreSQL
hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
hibernate.connection.driver_class= org.postgresql.Driver
hibernate.connection.url= jdbc:postgresql://localhost/test
hibernate.connection.username=root
hibernate.connection.password=secret
hibernate.show_sql=true
hibernate.hbm2ddl=validate

MySQL 8.0은 MySQL 5.0보다 더 많은 기능을 지원하므로 Hibernate가 모든 기능을 최대한 활용하려면 올바른 방언을 지정하십시오.

H2 데이터베이스는 일반적으로 메모리에 저장되므로 mem:test작업할 SQL 서버의 이름과 스키마 이름도 메모리에 저장됩니다.