5.1 Automatyczne generowanie schematu danych
Kiedy po raz pierwszy konfigurujesz Hibernate, możesz włączyć wiele interesujących ustawień. Nie przyniosłem ich wcześniej, żeby nie pryskać. Ale pod koniec poziomu myślę o niektórych z nich do opowiedzenia.
Pierwszym takim ustawieniem jest hbm2ddl.auto
. Może mieć 5 różnych wartości:
uprawomocnić | Sprawdzanie poprawności: Hibernate sprawdzi, czy nazwy i typy kolumn i pól są zgodne w bazie danych i adnotacjach. Jest to najczęstszy tryb. |
aktualizacja | Aktualizacja: Hibernate zaktualizuje tabele w bazie danych, jeśli one lub ich kolumny są inne niż oczekiwano. |
tworzyć | Odtwórz: Hibernate usunie wszystkie tabele z bazy danych i utworzy je ponownie na podstawie danych z adnotacji. |
utwórz-upuść | Tworzenie-usuwanie. Na początku pracy Hibernate utworzy wszystkie tabele, na końcu pracy usunie je po sobie. |
nic | Hibernate nic nie da. Jeśli gdzieś baza nie będzie odpowiadała oczekiwaniom, to podczas wykonywania zapytań zostaną wyrzucone błędy. |
5.2 Żądania logowania
Drugim bardzo przydatnym ustawieniem Hibernate jest rejestrowanie wszystkich jego żądań do bazy danych: wszystkie żądania do bazy danych są duplikowane w konsoli. Jest to bardzo przydatna funkcja, jeśli wprowadzasz zmiany w kodzie związanym z Hibernate.
Po pierwsze, lepiej zrozumiesz, w jaki sposób Twoje zapytania są konwertowane na SQL. Po drugie, jest łatwiej i wcześniej będziesz mógł znaleźć błędy. I na pewno będą. Hibernacja nie zawsze działa tak, jak byśmy tego oczekiwali. Szczególnie często wiąże się to z adnotacjami: rozumiesz je na swój sposób, a Hibernate na swój sposób.
Ustawienie, które umożliwia rejestrowanie, nazywa się hibernate.show_sql
. Jeśli ustawisz jego wartość na true, zapytania do bazy danych będą zapisywane w konsoli. Parametr jest również używany w połączeniu z nim hibernate.format_sql
, co pozwala na ustawienie wygodnego formatu zapytania SQL w logu.
Innym sposobem rejestrowania żądań w bazie danych jest użycie standardowego rejestratora . Wszystko poskutkowało tym, że Hibernate zapisuje już swoje zapytania do standardowego loggera, ale tylko z zakresem - DEBUG. Musisz zmienić dwie właściwości w swoim standardowym rejestratorze:
logging.level.org.hibernate.SQL=debug
logging.level.org.hibernate.type.descriptor.sql.BasicBinder=trace
Zmiana poziomu BasicBinder na trace
doda nam parametry zapytania jednak w nieco nietypowej formie - sekwencyjnego wyliczania po samym zapytaniu.
Trzecie podejście polega na użyciu specjalnego sterownika proxy dla bazy danych .
Na przykład log4jdbc
lub p6spy
. Oba serwery proxy działają i mają startery, chociaż log4jdbc
w chwili pisania tego tekstu nie było żadnych zatwierdzeń.
<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>
Nie będę wchodził w szczegóły, chcę tylko, żebyś wiedział, że jest to możliwe.
5.3 Dialekty SQL
I jeszcze kilka podstawowych informacji.
Hibernate obsługuje bardzo dużą liczbę systemów DBMS. Każdy z nich implementuje standardowy zestaw funkcji SQL i kilka własnych. Lub różne wersje SQL. Dlatego, aby pracować z tymi DBMS, musisz powiedzieć Hibernate, którego dialektu języka SQL ma używać.
Oto lista najpopularniejszych dialektów:
PostgreSQL | org.hibernate.dialect.PostgreSQLDialect |
Baza danych SAP | org.hibernate.dialect.SAPDBDialect |
Sybase | org.hibernate.dialect.SybaseDialect |
Informix | org.hibernate.dialect.InformixDialect |
Serwer Microsoft SQL 2008 | org.hibernate.dialect.SQLServer2008Dialect |
MySQL | org.hibernate.dialect.MySQLDialect |
Oracle (dowolna wersja) | org.hibernate.dialect.OracleDialect |
Wyrocznia 11g | org.hibernate.dialect.Oracle10gDialect |
Oczywiście takich dialektów może być dowolna liczba. Możesz napisać dla niego własny DBMS i własny dialekt.
Dlaczego ważne jest, aby określić właściwy dialekt?
Każda baza danych może mieć nieco inne typy danych. Dlatego, aby Hibernate działał idealnie dokładnie tak, jak tego oczekujesz, musisz powiedzieć mu, jakiego dialektu języka SQL ma używać.
Oto ciekawy obraz, który pokazuje, jak wszystko jest połączone w rzeczywistości:
5.4 Popularne ustawienia
Aby ułatwić Ci życie, oto pełna lista kilku ustawień:
MySQL 8.0 |
---|
|
MySQL 5.0 |
---|
|
PostgreSQL |
---|
|
MySQL 8.0 obsługuje więcej funkcji niż MySQL 5.0, więc jeśli chcesz, aby Hibernate maksymalnie je wszystkie wykorzystał, określ właściwy dialekt.
Baza danych H2 jest zwykle przechowywana w pamięci, podobnie jak mem:test
nazwa serwera SQL i nazwa schematu, z którym będziesz pracować.
GO TO FULL VERSION