5.1 Automatisk generering av dataschema

När du först konfigurerar Hibernate kan du aktivera många intressanta inställningar. Jag tog inte med dem innan, för att inte spraya. Men i slutet av nivån tänker jag på några av dem att berätta.

Den första sådana inställningen är hbm2ddl.auto. Det kan ha 5 olika värden:

bekräfta Validering: Hibernate kontrollerar om kolumn- och fältnamnen och -typerna matchar i databasen och i anteckningarna. Detta är det vanligaste läget.
uppdatering Uppdatering: Hibernate kommer att uppdatera tabellerna i databasen om de eller deras kolumner är annorlunda än förväntat.
skapa Återskapa: Hibernate tar bort alla tabeller i databasen och återskapar dem baserat på data från anteckningarna.
skapa-släpp Skapande-radering. I början av arbetet kommer Hibernate att skapa alla tabeller, i slutet av arbetet kommer det att radera dem efter sig.
ingen Hibernate kommer inte att göra någonting alls. Om någonstans basen inte stämmer överens med förväntningarna, kommer fel att kastas under körningen av frågor.

5.2 Loggningsförfrågningar

Den andra mycket användbara inställningen för Hibernate är loggningen av alla dess förfrågningar till databasen: alla förfrågningar till databasen dupliceras i konsolen. Detta är en mycket användbar funktion om du gör ändringar i Hibernate-relaterad kod.

Först kommer du att bättre förstå hur dina frågor konverteras till SQL. För det andra är det lättare och tidigare kommer du att kunna hitta fel. Och det kommer de definitivt att göra. Hibernate fungerar inte alltid som vi förväntar oss. Detta är särskilt ofta förknippat med annoteringar: du förstår dem på ditt eget sätt och viloläge på ditt eget sätt.

Inställningen som möjliggör loggning kallas hibernate.show_sql. Om du ställer in dess värde till true, kommer frågor till databasen att skrivas till konsolen. Parametern används också tillsammans med den, hibernate.format_sqlvilket gör att du kan ställa in ett bekvämt SQL-frågeformat i loggen.

Ett annat sätt att logga förfrågningar till databasen är att använda standardloggern . Allt gav i det faktum att Hibernate redan skriver sina frågor till standardloggern, men bara med omfattningen - DEBUG. Du måste ändra två egenskaper i din standardlogger:

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

Att ändra nivån på BasicBinder till tracekommer att lägga till frågeparametrar till oss, dock i en något ovanlig form - sekventiell uppräkning efter själva frågan.

Den tredje metoden är att använda en speciell proxy-drivrutin för databasen .

Till exempel log4jdbceller p6spy. Båda fullmakterna fungerar och har startande, även om log4jdbcdet inte fanns några commits på länge i skrivande 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>

Jag kommer inte gå in på detaljer, jag vill bara att du ska veta att detta är möjligt.

5.3 SQL-dialekter

Och lite mer bakgrundsinformation.

Hibernate stöder ett mycket stort antal DBMS. Var och en av dem implementerar en standarduppsättning SQL-funktioner och några till sina egna. Eller olika versioner av SQL. För att arbeta med dessa DBMS måste du därför tala om för Hibernate vilken dialekt av SQL-språket du ska använda.

Här är en lista över de mest populära dialekterna:

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

Naturligtvis kan det finnas hur många sådana dialekter som helst. Du kan skriva ditt eget DBMS och din egen dialekt för det.

Varför är det viktigt att ange rätt dialekt?

Varje databas kan ha lite olika datatyper. Därför, för att Hibernate ska fungera perfekt precis som du förväntar dig av det, måste du tala om för den vilken dialekt av SQL-språket den behöver använda.

Här är en intressant bild som visar hur allt hänger ihop i verkligheten:

5.4 Populära inställningar

För att göra ditt liv enklare, här är en komplett lista med flera inställningar:

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 stöder fler funktioner än MySQL 5.0, så om du vill att Hibernate ska få ut det mesta av dem alla, ange då rätt dialekt.

H2-databasen lagras vanligtvis i minnet, så mem:testär både namnet på SQL-servern och namnet på schemat du kommer att arbeta med.