5.1 การสร้างสคีมาข้อมูลอัตโนมัติ
เมื่อคุณกำหนดค่า Hibernate เป็นครั้งแรก คุณสามารถเปิดใช้งานการตั้งค่าที่น่าสนใจมากมาย ฉันไม่ได้นำมาก่อนเพื่อไม่ให้ฉีดพ่น แต่เมื่อจบระดับนี้แล้ว ผมคิดว่ามีบางส่วนที่จะเล่าให้ฟัง
hbm2ddl.auto
การตั้งค่า ดังกล่าวครั้งแรกคือ สามารถมีค่าต่างกันได้ 5 ค่า:
ตรวจสอบความถูกต้อง | การตรวจสอบความถูกต้อง: ไฮเบอร์เนตจะตรวจสอบว่าชื่อและประเภทคอลัมน์และฟิลด์ตรงกับในฐานข้อมูลและในคำอธิบายประกอบหรือไม่ นี่เป็นโหมดที่ใช้บ่อยที่สุด |
อัปเดต | อัปเดต: ไฮเบอร์เนตจะอัปเดตตารางในฐานข้อมูลหากตารางหรือคอลัมน์แตกต่างจากที่คาดไว้ |
สร้าง | สร้างใหม่: ไฮเบอร์เนตจะลบตารางทั้งหมดในฐานข้อมูลและสร้างใหม่ตามข้อมูลจากคำอธิบายประกอบ |
สร้างวาง | การสร้าง-การลบ ในช่วงเริ่มต้นของงาน Hibernate จะสร้างตารางทั้งหมดเมื่อสิ้นสุดการทำงานก็จะลบออกในภายหลัง |
ไม่มี | ไฮเบอร์เนตจะไม่ทำอะไรเลย หากฐานไม่ตรงกับที่คาดไว้ ข้อผิดพลาดจะเกิดขึ้นระหว่างการดำเนินการค้นหา |
5.2 คำขอบันทึก
การตั้งค่าที่มีประโยชน์มากประการที่สองของ Hibernate คือการบันทึกคำขอทั้งหมดไปยังฐานข้อมูล: คำขอทั้งหมดไปยังฐานข้อมูลจะถูกทำซ้ำในคอนโซล นี่เป็นคุณสมบัติที่มีประโยชน์มาก หากคุณกำลังทำการเปลี่ยนแปลงรหัสที่เกี่ยวข้องกับการไฮเบอร์เนต
ขั้นแรก คุณจะเข้าใจได้ดีขึ้นว่าข้อความค้นหาของคุณถูกแปลงเป็น SQL อย่างไร ประการที่สอง จะง่ายกว่าและเร็วกว่านี้ คุณจะสามารถพบข้อผิดพลาดได้ และพวกเขาจะทำอย่างแน่นอน ไฮเบอร์เนตไม่ได้ทำงานตามที่เราคาดหวังเสมอไป สิ่งนี้มักจะเกี่ยวข้องกับคำอธิบายประกอบโดยเฉพาะอย่างยิ่ง: คุณเข้าใจพวกเขาในแบบของคุณเอง และไฮเบอร์เนตในแบบของคุณเอง
การตั้งค่าที่เปิดใช้งานการบันทึกเรียกhibernate.show_sql
ว่า หากคุณตั้งค่าเป็นจริง แบบสอบถามไปยังฐานข้อมูลจะถูกเขียนไปยังคอนโซล นอกจากนี้ยังใช้พารามิเตอร์ร่วมกับมันhibernate.format_sql
ซึ่งช่วยให้คุณตั้งค่ารูปแบบการสืบค้น SQL ที่สะดวกในบันทึก
อีกวิธีหนึ่งในการบันทึกคำขอไปยังฐานข้อมูลคือการใช้ตัวบันทึกมาตรฐาน ทุกอย่างให้ความจริงที่ว่าไฮเบอร์เนตเขียนแบบสอบถามไปยังตัวบันทึกมาตรฐานแล้ว แต่มีขอบเขตเท่านั้น - DEBUG คุณต้องเปลี่ยนคุณสมบัติสองอย่างในตัวบันทึกมาตรฐานของคุณ:
logging.level.org.hibernate.SQL=debug
logging.level.org.hibernate.type.descriptor.sql.BasicBinder=trace
การเปลี่ยนระดับของBasicBinderเป็นtrace
จะเพิ่มพารามิเตอร์การสืบค้นให้กับเรา อย่างไรก็ตาม ในรูปแบบที่ผิดปกติเล็กน้อย นั่นคือการแจงนับตามลำดับหลังการสืบค้น
วิธีที่สามคือ การใช้โปรแกรม ควบคุมพร็อกซีพิเศษสำหรับฐานข้อมูล
ตัวอย่างเช่นlog4jdbc
หรือp6spy
. ผู้รับมอบฉันทะทั้งสองกำลังทำงานและมีผู้เริ่มต้นแม้ว่าlog4jdbc
จะไม่มีข้อผูกมัดเป็นเวลานานในขณะที่เขียน
<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>
ฉันจะไม่ลงรายละเอียด ฉันแค่อยากให้คุณรู้ว่ามันเป็นไปได้
5.3 ภาษา SQL
และข้อมูลเบื้องหลังเพิ่มเติม
Hibernate รองรับ DBMS จำนวนมาก แต่ละคนใช้ชุดมาตรฐานของฟังก์ชัน SQL และบางส่วนของตนเอง หรือเวอร์ชันต่างๆ ของ SQL ดังนั้น ในการทำงานกับ DBMS เหล่านี้ คุณต้องบอก Hibernate ว่าจะใช้ภาษาถิ่นใดของภาษา SQL
นี่คือรายการภาษาถิ่นยอดนิยม:
PostgreSQL | org.hibernate.dialect.PostgreSQLDialect |
SAP ฐานข้อมูล | org.hibernate.dialect.SAPDBDialect |
ไซเบส | org.hibernate.dialect.SybaseDialect |
อินฟอร์มิกซ์ | org.hibernate.dialect.InformixDialect |
ไมโครซอฟต์ เอสคิวแอล เซิร์ฟเวอร์ 2008 | org.hibernate.dialect.SQLServer2008Dialect |
มายเอสคิวแอล | org.hibernate.dialect.MySQLDialect |
ออราเคิล (ทุกรุ่น) | org.hibernate.dialect.OracleDialect |
ออราเคิล 11g | org.hibernate.dialect.Oracle10gDialect |
แน่นอนว่าอาจมีภาษาถิ่นจำนวนเท่าใดก็ได้ คุณสามารถเขียน DBMS ของคุณเองและภาษาถิ่นของคุณเองได้
เหตุใดการระบุภาษาถิ่นที่ถูกต้องจึงมีความสำคัญ
แต่ละฐานข้อมูลอาจมีประเภทข้อมูลที่แตกต่างกันเล็กน้อย ดังนั้นเพื่อให้ Hibernate ทำงานได้อย่างสมบูรณ์แบบตามที่คุณคาดหวัง คุณต้องบอกด้วยว่าภาษาถิ่นใดของภาษา SQL ที่ต้องใช้
นี่คือภาพที่น่าสนใจที่แสดงให้เห็นว่าทุกสิ่งเชื่อมโยงกันในความเป็นจริงอย่างไร:

5.4 การตั้งค่ายอดนิยม
เพื่อให้ชีวิตของคุณง่ายขึ้น นี่คือรายการการตั้งค่าต่างๆ ทั้งหมด:
มายเอสคิวแอล 8.0 |
---|
|
มายเอสคิวแอล 5.0 |
---|
|
PostgreSQL |
---|
|
MySQL 8.0 รองรับคุณสมบัติมากกว่า MySQL 5.0 ดังนั้นหากคุณต้องการให้ Hibernate ใช้ประโยชน์สูงสุดจากคุณสมบัติเหล่านั้น ให้ระบุภาษาถิ่นที่ถูกต้อง
โดยปกติแล้ว ฐานข้อมูล H2 จะถูกจัดเก็บไว้ในหน่วยความจำ ดังนั้นจึงmem:test
เป็นทั้งชื่อของเซิร์ฟเวอร์ SQL และชื่อของสคีมาที่คุณจะใช้งานด้วย
GO TO FULL VERSION