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_sql
vilket 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 trace
kommer 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 log4jdbc
eller p6spy
. Båda fullmakterna fungerar och har startande, även om log4jdbc
det 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 |
---|
|
MySQL 5.0 |
---|
|
PostgreSQL |
---|
|
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.
GO TO FULL VERSION