5.1 Penjanaan skema data automatik

Apabila anda mula-mula mengkonfigurasi Hibernate, anda boleh mendayakan banyak tetapan yang menarik. Saya tidak membawanya sebelum ini, supaya tidak menyembur. Tetapi pada akhir peringkat saya memikirkan beberapa daripada mereka untuk memberitahu.

Tetapan pertama sedemikian ialah hbm2ddl.auto. Ia boleh mempunyai 5 nilai yang berbeza:

mengesahkan Pengesahan: Hibernate akan menyemak sama ada nama dan jenis lajur dan medan sepadan dalam pangkalan data dan dalam anotasi. Ini adalah mod yang paling biasa.
kemas kini Kemas kini: Hibernate akan mengemas kini jadual dalam pangkalan data jika ia atau lajurnya berbeza daripada yang dijangkakan.
cipta Buat Semula: Hibernate akan memadam semua jadual dalam pangkalan data dan menciptanya semula berdasarkan data daripada anotasi.
cipta-jatuhkan Penciptaan-pemadaman. Pada permulaan kerja, Hibernate akan mencipta semua jadual, pada akhir kerja, ia akan memadamkannya selepas itu sendiri.
tiada Hibernate tidak akan melakukan apa-apa sama sekali. Jika di suatu tempat asas tidak sepadan dengan jangkaan, maka ralat akan dilemparkan semasa pelaksanaan pertanyaan.

5.2 Permintaan pembalakan

Tetapan Hibernate kedua yang sangat berguna ialah pengelogan semua permintaannya ke pangkalan data: semua permintaan kepada pangkalan data diduplikasi dalam konsol. Ini adalah ciri yang sangat berguna jika anda membuat perubahan pada kod berkaitan Hibernate.

Pertama, anda akan lebih memahami cara pertanyaan anda ditukar kepada SQL. Kedua, lebih mudah dan lebih awal anda akan dapat mencari ralat. Dan mereka pasti akan melakukannya. Hibernate tidak selalu berfungsi seperti yang kita harapkan. Ini terutamanya sering dikaitkan dengan anotasi: anda memahaminya dengan cara anda sendiri, dan Hibernate dengan cara anda sendiri.

Tetapan yang membolehkan pengelogan dipanggil hibernate.show_sql. Jika anda menetapkan nilainya kepada benar, maka pertanyaan kepada pangkalan data akan ditulis ke konsol. Parameter ini juga digunakan bersama dengannya hibernate.format_sql, yang membolehkan anda menetapkan format pertanyaan SQL yang mudah dalam log.

Satu lagi cara untuk log permintaan ke pangkalan data adalah dengan menggunakan pembalak standard . Segala-galanya memberikan fakta bahawa Hibernate sudah menulis pertanyaannya kepada pembalak standard, tetapi hanya dengan skop - DEBUG. Anda perlu menukar dua sifat dalam logger standard anda:

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

Menukar tahap BasicBinder kepada traceakan menambah parameter pertanyaan kepada kami, walau bagaimanapun, dalam bentuk yang sedikit luar biasa - penghitungan berjujukan selepas pertanyaan itu sendiri.

Pendekatan ketiga ialah menggunakan pemacu proksi khas untuk pangkalan data .

Contohnya, log4jdbcatau p6spy. Kedua-dua proksi berfungsi dan mempunyai permulaan, walaupun log4jdbctidak ada komitmen untuk masa yang lama pada masa penulisan.


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

Saya tidak akan pergi ke butiran, saya hanya mahu anda tahu bahawa ini mungkin.

5.3 Dialek SQL

Dan beberapa lagi maklumat latar belakang.

Hibernate menyokong sejumlah besar DBMS. Setiap daripada mereka melaksanakan set standard fungsi SQL dan beberapa lagi fungsi mereka sendiri. Atau versi SQL yang berbeza. Oleh itu, untuk bekerja dengan DBMS ini, anda perlu memberitahu Hibernate dialek bahasa SQL yang hendak digunakan.

Berikut ialah senarai dialek yang paling popular:

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

Sudah tentu, terdapat beberapa dialek sedemikian. Anda boleh menulis DBMS anda sendiri dan dialek anda sendiri untuknya.

Mengapakah penting untuk menyatakan dialek yang betul?

Setiap pangkalan data mungkin mempunyai jenis data yang sedikit berbeza. Oleh itu, untuk membolehkan Hibernate berfungsi dengan sempurna seperti yang anda harapkan daripadanya, anda perlu memberitahu dialek bahasa SQL yang perlu digunakan.

Berikut adalah gambar menarik yang menunjukkan bagaimana segala-galanya disambungkan dalam realiti:

5.4 Tetapan popular

Untuk menjadikan hidup anda lebih mudah, berikut ialah senarai lengkap beberapa tetapan:

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 menyokong lebih banyak ciri daripada MySQL 5.0, jadi jika anda mahu Hibernate memanfaatkan kesemuanya, tentukan dialek yang betul.

Pangkalan data H2 biasanya disimpan dalam ingatan, begitu mem:testjuga nama pelayan SQL dan nama skema yang akan anda gunakan.