5.1 Automatisch genereren van gegevensschema's

Wanneer u Hibernate voor het eerst configureert, kunt u veel interessante instellingen inschakelen. Ik heb ze niet eerder meegenomen om niet te spuiten. Maar aan het einde van het level denk ik erover na om er een paar te vertellen.

De eerste dergelijke instelling is de hbm2ddl.auto. Het kan 5 verschillende waarden hebben:

valideren Validatie: Hibernate controleert of de kolom- en veldnamen en typen overeenkomen in de database en in de annotaties. Dit is de meest gebruikelijke modus.
update Update: Hibernate werkt de tabellen in de database bij als ze of hun kolommen anders zijn dan verwacht.
creëren Opnieuw maken: Hibernate verwijdert alle tabellen in de database en maakt ze opnieuw op basis van de gegevens uit de annotaties.
creëer-drop Aanmaken-verwijderen. Aan het begin van het werk zal Hibernate alle tabellen maken, aan het einde van het werk zal het ze zelf verwijderen.
geen Slaapstand doet helemaal niets. Als ergens de basis niet overeenkomt met de verwachting, worden er fouten gegenereerd tijdens het uitvoeren van query's.

5.2 Logboekverzoeken

De tweede zeer nuttige instelling van Hibernate is het loggen van al zijn verzoeken aan de database: alle verzoeken aan de database worden gedupliceerd in de console. Dit is een erg handige functie als u wijzigingen aanbrengt in Hibernate-gerelateerde code.

Ten eerste zul je beter begrijpen hoe je query's worden geconverteerd naar SQL. Ten tweede is het eenvoudiger en eerder zult u fouten kunnen vinden. En dat zullen ze zeker doen. Hibernate werkt niet altijd zoals we verwachten. Dit wordt vooral vaak geassocieerd met annotaties: u begrijpt ze op uw eigen manier en Hibernate op uw eigen manier.

De instelling die logboekregistratie mogelijk maakt, wordt genoemd hibernate.show_sql. Als u de waarde instelt op true, worden query's naar de database naar de console geschreven. De parameter wordt ook gebruikt in combinatie met it hibernate.format_sql, waarmee u een handige SQL-query-indeling in het logboek kunt instellen.

Een andere manier om verzoeken in de database te loggen, is door de standaardlogger te gebruiken . Alles kwam erop neer dat Hibernate zijn vragen al naar de standaardlogger schrijft, maar alleen met de scope - DEBUG. U moet twee eigenschappen wijzigen in uw standaardlogger:

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

Als u het niveau van BasicBinder wijzigt in trace, worden er queryparameters aan ons toegevoegd, echter in een enigszins ongebruikelijke vorm: sequentiële opsomming na de query zelf.

De derde benadering is het gebruik van een speciaal proxystuurprogramma voor de database .

Bijvoorbeeld, log4jdbcof p6spy. Beide proxy's werken en hebben starters, hoewel log4jdbcer op het moment van schrijven lange tijd geen commits waren.


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

Ik zal niet in details treden, ik wil alleen dat u weet dat dit mogelijk is.

5.3 SQL-dialecten

En wat meer achtergrondinformatie.

Hibernate ondersteunt een zeer groot aantal DBMS'en. Elk van hen implementeert een standaardset SQL-functies en nog enkele eigen functies. Of verschillende versies van SQL. Om met deze DBMS te werken, moet u Hibernate daarom vertellen welk dialect van de SQL-taal moet worden gebruikt.

Hier is een lijst met de meest populaire dialecten:

PostgreSQL org.slaapstand.dialect.PostgreSQLDialect
SAP DB org.slaapstand.dialect.SAPDBDialect
Sybase org.slaapstand.dialect.SybaseDialect
informix org.slaapstand.dialect.InformixDialect
Microsoft SQL Server 2008 org.slaapstand.dialect.SQLServer2008Dialect
MySQL org.slaapstand.dialect.MySQLDialect
Oracle (elke versie) org.slaapstand.dialect.OracleDialect
Orakel 11g org.slaapstand.dialect.Oracle10gDialect

Natuurlijk kan er een aantal van dergelijke dialecten zijn. Je kunt er je eigen DBMS en je eigen dialect voor schrijven.

Waarom is het belangrijk om het juiste dialect te specificeren?

Elke database kan iets andere gegevenstypen hebben. Om ervoor te zorgen dat Hibernate perfect werkt zoals u het verwacht, moet u het dus vertellen welk dialect van de SQL-taal het moet gebruiken.

Hier is een interessante foto die laat zien hoe alles in werkelijkheid met elkaar verbonden is:

5.4 Populaire instellingen

Om uw leven gemakkelijker te maken, vindt u hier een volledige lijst met verschillende instellingen:

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 ondersteunt meer functies dan MySQL 5.0, dus als u wilt dat Hibernate er het meeste uit haalt, geef dan het juiste dialect op.

De H2-database wordt meestal in het geheugen opgeslagen, evenals mem:testde naam van de SQL-server en de naam van het schema waarmee u gaat werken.