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
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
มายเอสคิวแอล 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 ดังนั้นหากคุณต้องการให้ Hibernate ใช้ประโยชน์สูงสุดจากคุณสมบัติเหล่านั้น ให้ระบุภาษาถิ่นที่ถูกต้อง

โดยปกติแล้ว ฐานข้อมูล H2 จะถูกจัดเก็บไว้ในหน่วยความจำ ดังนั้นจึงmem:testเป็นทั้งชื่อของเซิร์ฟเวอร์ SQL และชื่อของสคีมาที่คุณจะใช้งานด้วย