JavaRush /Kurslar /All lectures for UZ purposes /Hibernate konfiguratsiyasi

Hibernate konfiguratsiyasi

All lectures for UZ purposes
Daraja, Dars
Mavjud

5.1 Ma'lumotlar sxemasini avtomatik yaratish

Hibernate dastlab ishga tushirilganda juda ko'p qiziqarli sozlamalarni yoqish mumkin. Manashu joyda ularni sanab o'tishni istagandim, lekin oxirida ayrimlarini bayon qilishga qaror qildim.

Birinchi shunday sozlama — bu hbm2ddl.auto parametri. Uning 5 xil qiymati bor:

validate Validatsiya: Hibernate ustunlar va ma'lumotlar bazasidagi maydonlar nomlarini va turlarini taqqoslab tekshiradi. Bu eng keng tarqalgan rejim.
update Yangilash: Hibernate ma'lumotlar bazasidagi jadvallarni yangilaydi, agar ular yoki ularning ustunlari kutganingizdan farq qilsa.
create Qayta yaratish: Hibernate ma'lumotlar bazasidagi barcha jadvallarni o'chiradi va ularni annotatsiyalardan kelib chiqib qayta yaratadi.
create-drop Yaratish-o'chirish. Hibernate ish boshlanishida barcha jadvallarni yaratadi, ish tugagach esa ularni o'chirib tashlaydi.
none Hibernate umuman hech narsa qilmaydi. Agar biror joyda ma'lumotlar bazasi kutganingizga mos kelmasa, so'rovlar bajarilishida xatolar paydo bo'ladi.

5.2 So'rovlarni loglash

Hibernate'ning ikkinchi juda foydali sozlamasi — bu barcha so'rovlarini ma'lumotlar bazasiga loglash: barcha bazaga so'rovlar konsolga dublanadi. Agar Hibernate bilan bog'liq kodni o'zgartirish qilsangiz, bu juda foydali funksiya.

Birinchidan, so'rovlaringiz SQLga qanday o'tishini yaxshiroq tushunasiz. Ikkinchidan, xatolarni oson va tezroq topa olasiz. Xatolar albatta bo'ladi. Hibernate har doim kutganimizdek ishlamaydi. Ayniqsa, bu annotatsiyalar bilan bog'liq: siz ularni bir xil tushunasiz, Hibernate esa — boshqa xil.

Loglashni yoqadigan sozlama — bu hibernate.show_sql. Agar bu qiymat true ga o'rnatilgan bo'lsa, bazaga so'rovlar konsolda yoziladi. Shuningdek, hibernate.format_sql parametri bilan birgalikda foydalanuvchilar uchun qulay formatda SQL so'rovlarini loglash imkoniyatini beradi.

Bazaga so'rovlarni loglashda yana bir usul — standart loger dan foydalanish. Hibernate so'rovlarini standart logerga yozadi, lekin faqat ko'rinish doirasida — DEBUG. Siz o'zingizning standart logeringizda ikki xususiyatni o'zgartirishingiz kerak:


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

BasicBinder darajasini trace ga o'zgartirish so'rov parametrlari bilan qo'shiladi, lekin biroz noan'anaviy shaklda — so'rovdan so'ng ketma-ket ro'yxat.

Uchinchi yondashuv: maxsus proxy-driver dan foydalanish.

Masalan, log4jdbc yoki p6spy. Ikkala proxy ham ishlaydi va ularda startorlar bor, garchi log4jdbc da maqola yozilgan paytda ancha vaqt commitlar yo'q edi.


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

Detalizatsiyani kiritmayman, shunchaki sizning xabardor bo'lishingizni istayman。

5.3 SQL dialektlari

Biroz ma'lumot ham mavjud.

Hibernate juda ko'p sonli SSBMlar bilan ishlashga imkon beradi. Ulardan har biri standart SQL funktsiyalari to'plamini va o'ziga xoslarini amalga oshiradi. Yoki turli versiyalarini. Shuning uchun bu SSBMlar bilan ishlash uchun Hibernate ga qaysi SQL til dialektini ishlatishi kerakligini aytish kerak.

Ko'plab mashhur dialektlar ro'yxati:

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

Albatta, bu kabi dialektlar istalgancha bo'lishi mumkin. Siz o'zingizning SSBMngizni yozishingiz va unga o'z dialektingizni yozishingiz mumkin.

Nima uchun to'g'ri dialektni ko'rsatish muhim?

Har bir ma'lumotlar bazasida ma'lumotlar turlari bir oz farq qilishi mumkin. Shuning uchun Hibernate to'g'ri ishlashi uchun qaysi SQL til dialektini ishlatishi kerakligini aytish kerak.

Bu qiziqarli rasm, aslida hammasi qanday bog'liqligini ko'rsatadi:

5.4 Mashhur sozlamalar

Hayotingizni osonlashtirish uchun bir nechta sozlamalar ro'yxatini keltiraman:

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 ga nisbatan ko'proq imkoniyatlarni qo'llab-quvvatlaydi, agar Hibernate barcha imkoniyatlarni ishlatishini istasangiz, to'g'ri dialektni ko'rsating.

H2 ma'lumotlar bazasi odatda xotirada saqlanadi, shuning uchun mem:test — bu ham SQL serverning nomi, ham siz ishlaydigan sxema nomi hisoblanadi.

Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION