5.1 Otomatik veri şeması oluşturma

Hazırda bekletmeyi ilk yapılandırdığınızda, birçok ilginç ayarı etkinleştirebilirsiniz. Püskürtmemek için onları daha önce getirmedim. Ama seviyenin sonunda bazılarını anlatmayı düşünüyorum.

Bu tür ilk ayar hbm2ddl.auto. 5 farklı değere sahip olabilir:

doğrulamak Doğrulama: Hazırda bekletme, sütun ve alan adları ile türlerinin veritabanında ve ek açıklamalarda eşleşip eşleşmediğini kontrol eder. Bu en yaygın moddur.
güncelleme Güncelleme: Hazırda bekletme, veritabanındaki tabloları veya sütunları beklenenden farklıysa günceller.
yaratmak Yeniden Oluştur: Hazırda Beklet, veritabanındaki tüm tabloları siler ve açıklamalardan elde edilen verilere göre yeniden oluşturur.
oluştur-bırak Oluşturma-silme. Hibernate işin başında tüm tabloları oluşturacak, işin sonunda kendinden sonra onları silecektir.
hiçbiri Hazırda bekletme hiçbir şey yapmaz. Temelin bir yerde beklentiyle eşleşmemesi durumunda, sorguların yürütülmesi sırasında hatalar atılacaktır.

5.2 Günlüğe kaydetme istekleri

Hibernate'in ikinci çok kullanışlı ayarı, tüm isteklerinin veritabanına kaydedilmesidir: veritabanına yapılan tüm istekler konsolda çoğaltılır. Hazırda bekletme ile ilgili kodda değişiklik yapıyorsanız, bu çok yararlı bir özelliktir.

İlk olarak, sorgularınızın SQL'e nasıl dönüştürüldüğünü daha iyi anlayacaksınız. İkincisi, daha kolay ve daha erken hataları bulabileceksiniz. Ve kesinlikle yapacaklar. Hazırda bekletme her zaman beklediğimiz gibi çalışmaz. Bu, özellikle ek açıklamalarla ilişkilendirilir: onları kendi yönteminizle anlarsınız ve Hazırda Bekletme modunu kendi yönteminizle anlarsınız.

Günlüğe kaydetmeyi sağlayan ayara denir hibernate.show_sql. Değerini true olarak ayarlarsanız, veritabanına yapılan sorgular konsola yazılır. hibernate.format_sqlParametre , günlükte uygun bir SQL sorgu formatı ayarlamanıza izin veren onunla birlikte de kullanılır .

İstekleri veritabanına kaydetmenin başka bir yolu da standart günlükçü kullanmaktır . Her şey, Hazırda Beklet'in sorgularını zaten standart günlükçüye yazdığı gerçeğinde, ancak yalnızca kapsamla - DEBUG. Standart kaydedicinizdeki iki özelliği değiştirmeniz gerekir:

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

BasicBinder düzeyinin olarak değiştirilmesi trace, bize biraz alışılmadık bir biçimde sorgu parametreleri ekleyecektir - sorgunun kendisinden sonra sıralı numaralandırma.

Üçüncü yaklaşım, veritabanı için özel bir proxy sürücüsü kullanmaktır .

Örneğin log4jdbcveya p6spy. Her iki proxy de çalışıyor ve başlatıcıları var, ancak bu log4jdbcyazının yazıldığı sırada uzun süredir herhangi bir taahhüt yoktu.


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

Ayrıntılara girmeyeceğim, sadece bunun mümkün olduğunu bilmenizi istiyorum.

5.3 SQL lehçeleri

Ve biraz daha arka plan bilgisi.

Hazırda Bekletme, çok sayıda DBMS'yi destekler. Her biri standart bir SQL işlevleri kümesini ve biraz daha fazlasını uygular. Veya SQL'in farklı sürümleri. Bu nedenle, bu DBMS ile çalışmak için Hibernate'e SQL dilinin hangi lehçesini kullanacağınızı söylemeniz gerekir.

İşte en popüler lehçelerin bir listesi:

postgresql org.hibernate.dialect.PostgreSQLDialect
SAP veritabanı org.hibernate.dialect.SAPDBDialect
Sybase org.hibernate.dialect.SybaseDialect
Informix org.hibernate.dialect.InformixDialect
Microsoft SQL Sunucusu 2008 org.hibernate.dialect.SQLServer2008Dialect
MySQL org.hibernate.dialect.MySQLDialect
Oracle (herhangi bir sürüm) org.hibernate.dialect.OracleDialect
Oracle 11g org.hibernate.dialect.Oracle10gDialect

Tabii ki, bu tür herhangi bir sayıda lehçe olabilir. Bunun için kendi DBMS'nizi ve kendi lehçenizi yazabilirsiniz.

Doğru lehçeyi belirtmek neden önemlidir?

Her veritabanı biraz farklı veri türlerine sahip olabilir. Bu nedenle, Hibernate'in tam olarak beklediğiniz gibi mükemmel bir şekilde çalışması için, ona SQL dilinin hangi lehçesini kullanması gerektiğini söylemeniz gerekir.

İşte her şeyin gerçekte nasıl bağlantılı olduğunu gösteren ilginç bir resim:

5.4 Popüler ayarlar

Hayatınızı kolaylaştırmak için çeşitli ayarların tam listesi aşağıda verilmiştir:

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, MySQL 5.0'dan daha fazla özelliği destekler, bu nedenle Hibernate'in tüm bunlardan en iyi şekilde yararlanmasını istiyorsanız, doğru lehçeyi belirtin.

H2 veritabanı genellikle bellekte depolanır, dolayısıyla mem:testhem SQL sunucusunun adı hem de birlikte çalışacağınız şemanın adıdır.