5.1 Tự động tạo lược đồ dữ liệu

Khi bạn định cấu hình Hibernate lần đầu tiên, bạn có thể bật rất nhiều cài đặt thú vị. Tôi đã không mang chúng trước đây, để không phun. Nhưng ở cuối cấp độ, tôi nghĩ về một số người trong số họ để kể.

Cài đặt đầu tiên như vậy là hbm2ddl.auto. Nó có thể có 5 giá trị khác nhau:

xác thực Xác thực: Hibernate sẽ kiểm tra xem tên và loại cột và trường có khớp trong cơ sở dữ liệu và trong chú thích hay không. Đây là chế độ phổ biến nhất.
cập nhật Cập nhật: Hibernate sẽ cập nhật các bảng trong cơ sở dữ liệu nếu chúng hoặc các cột của chúng khác với dự kiến.
tạo nên Tạo lại: Hibernate sẽ xóa tất cả các bảng trong cơ sở dữ liệu và tạo lại chúng dựa trên dữ liệu từ các chú thích.
tạo thả Tạo-xóa. Khi bắt đầu công việc, Hibernate sẽ tạo tất cả các bảng, khi kết thúc công việc, nó sẽ tự xóa chúng.
không có Hibernate sẽ không làm gì cả. Nếu ở đâu đó cơ sở không khớp với mong đợi, thì các lỗi sẽ được đưa ra trong quá trình thực hiện các truy vấn.

5.2 Yêu cầu ghi nhật ký

Cài đặt rất hữu ích thứ hai của Hibernate là ghi nhật ký tất cả các yêu cầu của nó vào cơ sở dữ liệu: tất cả các yêu cầu tới cơ sở dữ liệu đều được sao chép trong bảng điều khiển. Đây là một tính năng rất hữu ích nếu bạn đang thực hiện các thay đổi đối với mã liên quan đến Hibernate.

Đầu tiên, bạn sẽ hiểu rõ hơn về cách các truy vấn của bạn được chuyển thành SQL. Thứ hai, bạn sẽ có thể tìm ra lỗi dễ dàng hơn và sớm hơn. Và họ chắc chắn sẽ làm được. Hibernate không phải lúc nào cũng hoạt động theo cách chúng ta mong đợi. Điều này đặc biệt thường liên quan đến các chú thích: bạn hiểu chúng theo cách riêng của bạn và Ngủ đông theo cách riêng của bạn.

Cài đặt cho phép ghi nhật ký được gọi là hibernate.show_sql. Nếu bạn đặt giá trị của nó thành true, thì các truy vấn tới cơ sở dữ liệu sẽ được ghi vào bảng điều khiển. Tham số này cũng được sử dụng cùng với nó hibernate.format_sql, cho phép bạn đặt định dạng truy vấn SQL thuận tiện trong nhật ký.

Một cách khác để ghi các yêu cầu vào cơ sở dữ liệu là sử dụng trình ghi nhật ký tiêu chuẩn . Mọi thứ được đưa ra bởi thực tế là Hibernate đã ghi các truy vấn của nó vào trình ghi nhật ký tiêu chuẩn, nhưng chỉ với phạm vi - GỠ LỖI. Bạn cần thay đổi hai thuộc tính trong bộ ghi tiêu chuẩn của mình:

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

Tuy nhiên , việc thay đổi cấp độ của BasicBinder thành tracesẽ thêm các tham số truy vấn cho chúng tôi, ở dạng hơi khác thường - liệt kê tuần tự sau chính truy vấn đó.

Cách tiếp cận thứ ba là sử dụng trình điều khiển proxy đặc biệt cho cơ sở dữ liệu .

Ví dụ, log4jdbchoặc p6spy. Cả hai proxy đều đang hoạt động và có phần khởi động, mặc dù log4jdbckhông có cam kết nào trong một thời gian dài tại thời điểm viết bài.


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

Tôi sẽ không đi vào chi tiết, tôi chỉ muốn bạn biết rằng điều này là có thể.

5.3 Phương ngữ SQL

Và một số thông tin cơ bản khác.

Hibernate hỗ trợ rất nhiều DBMS. Mỗi người trong số họ thực hiện một bộ chức năng SQL tiêu chuẩn và một số chức năng khác của riêng họ. Hoặc các phiên bản SQL khác nhau. Do đó, để làm việc với các DBMS này, bạn cần cho Hibernate biết phương ngữ nào của ngôn ngữ SQL sẽ sử dụng.

Dưới đây là danh sách các phương ngữ phổ biến nhất:

PostgreSQL org.hibernate.dialect.PostgreSQLDialect
Cơ sở dữ liệu SAP 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 (bất kỳ phiên bản nào) org.hibernate.dialect.OracleDialect
tiên tri 11g org.hibernate.dialect.Oracle10gDialect

Tất nhiên, có thể có bất kỳ số lượng phương ngữ như vậy. Bạn có thể viết DBMS của riêng bạn và phương ngữ của riêng bạn cho nó.

Tại sao điều quan trọng là xác định đúng phương ngữ?

Mỗi cơ sở dữ liệu có thể có các kiểu dữ liệu hơi khác nhau. Do đó, để Hibernate hoạt động hoàn hảo theo cách bạn mong đợi từ nó, bạn cần cho nó biết phương ngữ của ngôn ngữ SQL mà nó cần sử dụng.

Đây là một bức tranh thú vị cho thấy mọi thứ được kết nối như thế nào trong thực tế:

5.4 Cài đặt phổ biến

Để làm cho cuộc sống của bạn dễ dàng hơn, đây là danh sách đầy đủ một số cài đặt:

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 hỗ trợ nhiều tính năng hơn MySQL 5.0, vì vậy nếu bạn muốn Hibernate tận dụng tối đa chúng, hãy chỉ định phương ngữ chính xác.

Cơ sở dữ liệu H2 thường được lưu trữ trong bộ nhớ, do đó mem:test, cả tên của máy chủ SQL và tên của lược đồ mà bạn sẽ làm việc.