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, log4jdbc
of p6spy
. Beide proxy's werken en hebben starters, hoewel log4jdbc
er 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 |
---|
|
MySQL 5.0 |
---|
|
PostgreSQL |
---|
|
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:test
de naam van de SQL-server en de naam van het schema waarmee u gaat werken.
GO TO FULL VERSION