5.1 Automatisk generering af dataskemaer

Når du først konfigurerer Hibernate, kan du aktivere en masse interessante indstillinger. Jeg har ikke taget dem med før, for ikke at sprøjte. Men i slutningen af ​​niveauet tænker jeg på nogle af dem at fortælle.

Den første sådanne indstilling er hbm2ddl.auto. Det kan have 5 forskellige værdier:

validere Validering: Hibernate vil kontrollere, om kolonne- og feltnavnene og -typerne stemmer overens i databasen og i annoteringerne. Dette er den mest almindelige tilstand.
opdatering Opdatering: Hibernate vil opdatere tabellerne i databasen, hvis de eller deres kolonner er anderledes end forventet.
skab Genopret: Dvale vil slette alle tabeller i databasen og genskabe dem baseret på dataene fra annoteringerne.
skabe-drop Oprettelse-sletning. I begyndelsen af ​​arbejdet vil Hibernate oprette alle tabellerne, i slutningen af ​​arbejdet vil den slette dem efter sig selv.
ingen Hibernate vil ikke gøre noget som helst. Hvis basen et eller andet sted ikke svarer til forventningen, vil der blive kastet fejl under udførelsen af ​​forespørgsler.

5.2 Logningsanmodninger

Den anden meget nyttige indstilling af Hibernate er logningen af ​​alle dens anmodninger til databasen: alle anmodninger til databasen duplikeres i konsollen. Dette er en meget nyttig funktion, hvis du laver ændringer i Hibernate-relateret kode.

Først vil du bedre forstå, hvordan dine forespørgsler konverteres til SQL. For det andet er det nemmere og tidligere vil du kunne finde fejl. Og det vil de helt sikkert. Hibernate fungerer ikke altid, som vi forventer. Dette er især ofte forbundet med annoteringer: du forstår dem på din egen måde, og dvale på din egen måde.

Indstillingen, der aktiverer logning, kaldes hibernate.show_sql. Hvis du indstiller dens værdi til sand, vil forespørgsler til databasen blive skrevet til konsollen. Parameteren bruges også i forbindelse med den hibernate.format_sql, som giver dig mulighed for at indstille et praktisk SQL-forespørgselsformat i loggen.

En anden måde at logge anmodninger til databasen på er at bruge standardloggeren . Alt gav i det faktum, at Hibernate allerede skriver sine forespørgsler til standardloggeren, men kun med omfanget - DEBUG. Du skal ændre to egenskaber i din standardlogger:

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

Ændring af niveauet af BasicBinder til tracevil tilføje forespørgselsparametre til os, dog i en lidt usædvanlig form - sekventiel opregning efter selve forespørgslen.

Den tredje fremgangsmåde er at bruge en speciel proxy-driver til databasen .

For eksempel log4jdbceller p6spy. Begge fuldmagter virker og har startere, selvom log4jdbcder ikke var nogen commits i lang tid i skrivende stund.


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

Jeg vil ikke gå i detaljer, jeg vil bare have dig til at vide, at dette er muligt.

5.3 SQL-dialekter

Og lidt mere baggrundsinformation.

Hibernate understøtter et meget stort antal DBMS'er. Hver af dem implementerer et standardsæt af SQL-funktioner og nogle flere af deres egne. Eller forskellige versioner af SQL. For at arbejde med disse DBMS skal du derfor fortælle Hibernate, hvilken dialekt af SQL-sproget du skal bruge.

Her er en liste over de mest populære dialekter:

PostgreSQL org.hibernate.dialect.PostgreSQLDialect
SAP DB org.hibernate.dialect.SAPDBDialect
Sybase org.hibernate.dialect.SybaseDialect
Informix org.hibernate.dialect.InformixDialect
Microsoft SQL Server 2008 org.hibernate.dialect.SQLServer2008Dialect
MySQL org.hibernate.dialect.MySQLDialect
Oracle (enhver version) org.hibernate.dialect.OracleDialect
Oracle 11g org.hibernate.dialect.Oracle10gDialect

Selvfølgelig kan der være et hvilket som helst antal af sådanne dialekter. Du kan skrive dit eget DBMS og din egen dialekt til det.

Hvorfor er det vigtigt at angive den korrekte dialekt?

Hver database kan have lidt forskellige datatyper. Derfor, for at Hibernate fungerer perfekt, præcis som du forventer af det, skal du fortælle det, hvilken dialekt af SQL-sproget det skal bruge.

Her er et interessant billede, der viser, hvordan alt hænger sammen i virkeligheden:

5.4 Populære indstillinger

For at gøre dit liv lettere, er her en komplet liste over flere indstillinger:

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 understøtter flere funktioner end MySQL 5.0, så hvis du vil have Hibernate til at få mest muligt ud af dem alle, så angiv den korrekte dialekt.

H2-databasen er normalt gemt i hukommelsen, det samme mem:tester både navnet på SQL-serveren og navnet på det skema, du skal arbejde med.