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 |
|---|
|
| MySQL 5.0 |
|---|
|
| PostgreSQL |
|---|
|
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.
GO TO FULL VERSION