5.1 Geração automática de esquema de dados

Ao configurar o Hibernate pela primeira vez, você pode ativar várias configurações interessantes. Eu não os trouxe antes, para não borrifar. Mas no final do nível penso em alguns deles para contar.

A primeira dessas configurações é o arquivo hbm2ddl.auto. Pode ter 5 valores diferentes:

validar Validação: O Hibernate verificará se os nomes e tipos de campos e colunas correspondem no banco de dados e nas anotações. Este é o modo mais comum.
atualizar Atualização: O Hibernate atualizará as tabelas no banco de dados se elas ou suas colunas forem diferentes do esperado.
criar Recriar: O Hibernate irá deletar todas as tabelas do banco de dados e recriá-las com base nos dados das anotações.
criar-soltar Criação-exclusão. No início do trabalho, o Hibernate irá criar todas as tabelas, ao final do trabalho, ele mesmo irá apagá-las.
nenhum O hibernate não fará nada. Se em algum lugar a base não corresponder à expectativa, erros serão lançados durante a execução das consultas.

5.2 Solicitações de registro

A segunda configuração muito útil do Hibernate é o registro de todas as suas solicitações ao banco de dados: todas as solicitações ao banco de dados são duplicadas no console. Este é um recurso muito útil se você estiver fazendo alterações no código relacionado ao Hibernate.

Primeiro, você entenderá melhor como suas consultas são convertidas em SQL. Em segundo lugar, é mais fácil e mais cedo você poderá encontrar erros. E eles definitivamente vão. O Hibernate nem sempre funciona da maneira que esperamos. Isso é especialmente frequentemente associado a anotações: você as entende à sua maneira e hiberna à sua maneira.

A configuração que habilita o log é chamada hibernate.show_sql. Se você definir seu valor como true, as consultas ao banco de dados serão gravadas no console. O parâmetro também é usado em conjunto com ele hibernate.format_sql, o que permite definir um formato de consulta SQL conveniente no log.

Outra maneira de registrar solicitações no banco de dados é usar o registrador padrão . Tudo cedeu no fato do Hibernate já gravar suas consultas no logger padrão, mas apenas com o escopo - DEBUG. Você precisa alterar duas propriedades em seu registrador padrão:

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

Alterar o nível de BasicBinder para traceadicionará parâmetros de consulta para nós, no entanto, de uma forma um pouco incomum - enumeração sequencial após a própria consulta.

A terceira abordagem é usar um driver proxy especial para o banco de dados .

Por exemplo, log4jdbcou p6spy. Ambos os proxies estão funcionando e têm starters, embora log4jdbcnão houvesse commits por um longo tempo no momento da escrita.


<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>

Não vou entrar em detalhes, só quero que você saiba que isso é possível.

5.3 dialetos SQL

E mais algumas informações básicas.

O Hibernate suporta um grande número de DBMSs. Cada um deles implementa um conjunto padrão de funções SQL e algumas outras próprias. Ou versões diferentes do SQL. Portanto, para trabalhar com esses SGBDs, você precisa informar ao Hibernate qual dialeto da linguagem SQL usar.

Aqui está uma lista dos dialetos mais populares:

PostgreSQLName org.hibernate.dialect.PostgreSQLDialect
banco de dados SAP org.hibernate.dialect.SAPDBDialect
Sybase org.hibernate.dialect.SybaseDialect
Informix org.hibernate.dialect.InformixDialect
Servidor Microsoft SQL 2008 org.hibernate.dialect.SQLServer2008Dialect
MySQL org.hibernate.dialect.MySQLDialect
Oracle (qualquer versão) org.hibernate.dialect.OracleDialect
Oráculo 11g org.hibernate.dialect.Oracle10gDialect

Claro, pode haver qualquer número de tais dialetos. Você pode escrever seu próprio DBMS e seu próprio dialeto para ele.

Por que é importante especificar o dialeto correto?

Cada banco de dados pode ter tipos de dados ligeiramente diferentes. Portanto, para que o Hibernate funcione perfeitamente exatamente como você espera dele, você precisa informar qual dialeto da linguagem SQL ele precisa usar.

Aqui está uma imagem interessante que mostra como tudo está conectado na realidade:

5.4 Configurações populares

Para facilitar sua vida, aqui está uma lista completa de várias configurações:

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
PostgreSQLName
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

O MySQL 8.0 suporta mais recursos do que o MySQL 5.0, portanto, se você deseja que o Hibernate aproveite ao máximo todos eles, especifique o dialeto correto.

O banco de dados H2 geralmente é armazenado na memória, assim mem:testcomo o nome do servidor SQL e o nome do esquema com o qual você trabalhará.