5.1 Awtomatikong pagbuo ng schema ng data

Kapag una mong na-configure ang Hibernate, maaari mong paganahin ang maraming kawili-wiling mga setting. Hindi ko sila dinala noon, para hindi mag-spray. Ngunit sa dulo ng antas ay iniisip ko ang ilan sa kanila na sasabihin.

Ang unang ganoong setting ay ang hbm2ddl.auto. Maaari itong magkaroon ng 5 magkakaibang mga halaga:

patunayan Pagpapatunay: Susuriin ng hibernate kung tumutugma ang mga pangalan at uri ng column at field sa database at sa mga anotasyon. Ito ang pinakakaraniwang mode.
update Update: I-a-update ng hibernate ang mga talahanayan sa database kung iba sila o ang kanilang mga column kaysa sa inaasahan.
lumikha Muling likhain: Tatanggalin ng hibernate ang lahat ng mga talahanayan sa database at muling likhain ang mga ito batay sa data mula sa mga anotasyon.
lumikha-drop Paglikha-pagtanggal. Sa simula ng trabaho, gagawin ng Hibernate ang lahat ng mga talahanayan, sa pagtatapos ng trabaho, tatanggalin nito ang mga ito pagkatapos mismo.
wala Walang gagawin ang hibernate. Kung sa isang lugar ang base ay hindi tumutugma sa inaasahan, ang mga error ay itatapon sa panahon ng pagpapatupad ng mga query.

5.2 Pag-log ng mga kahilingan

Ang pangalawang napaka-kapaki-pakinabang na setting ng Hibernate ay ang pag-log ng lahat ng mga kahilingan nito sa database: lahat ng mga kahilingan sa database ay nadoble sa console. Ito ay isang napaka-kapaki-pakinabang na tampok kung ikaw ay gumagawa ng mga pagbabago sa Hibernate related code.

Una, mas mauunawaan mo kung paano na-convert ang iyong mga query sa SQL. Pangalawa, mas madali at mas maaga ay makakahanap ka ng mga error. At tiyak na gagawin nila. Ang hibernate ay hindi palaging gumagana sa paraang inaasahan namin. Madalas itong nauugnay sa mga anotasyon: naiintindihan mo ang mga ito sa iyong sariling paraan, at Hibernate sa sarili mong paraan.

Ang setting na nagbibigay-daan sa pag-log ay tinatawag na hibernate.show_sql. Kung itatakda mo ang halaga nito sa true, ang mga query sa database ay isusulat sa console. Ginagamit din ang parameter kasabay nito hibernate.format_sql, na nagbibigay-daan sa iyong magtakda ng maginhawang format ng query sa SQL sa log.

Ang isa pang paraan upang mag - log ng mga kahilingan sa database ay ang paggamit ng karaniwang logger . Ang lahat ay nagbigay sa katotohanan na ang Hibernate ay nagsusulat na ng mga query nito sa karaniwang logger, ngunit sa saklaw lamang - DEBUG. Kailangan mong baguhin ang dalawang katangian sa iyong karaniwang logger:

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

Ang pagbabago sa antas ng BasicBinder sa traceay magdaragdag ng mga parameter ng query sa amin, gayunpaman, sa isang bahagyang hindi pangkaraniwang anyo - sequential enumeration pagkatapos ng query mismo.

Ang ikatlong diskarte ay ang paggamit ng isang espesyal na proxy driver para sa database .

Halimbawa, log4jdbco p6spy. Ang parehong mga proxy ay gumagana at may mga nagsisimula, kahit na log4jdbcwalang mga commit sa loob ng mahabang panahon sa oras ng pagsulat.


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

Hindi ko na idedetalye, gusto ko lang malaman mo na posible ito.

5.3 Mga diyalektong SQL

At ilang higit pang impormasyon sa background.

Sinusuportahan ng hibernate ang napakalaking bilang ng mga DBMS. Ang bawat isa sa kanila ay nagpapatupad ng isang karaniwang hanay ng mga SQL function at ilan pa sa kanilang sarili. O iba't ibang bersyon ng SQL. Samakatuwid, upang gumana sa mga DBMS na ito, kailangan mong sabihin sa Hibernate kung aling diyalekto ng wikang SQL ang gagamitin.

Narito ang isang listahan ng mga pinakasikat na diyalekto:

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 (anumang bersyon) org.hibernate.dialect.OracleDialect
Oracle 11g org.hibernate.dialect.Oracle10gDialect

Siyempre, maaaring mayroong anumang bilang ng gayong mga diyalekto. Maaari mong isulat ang iyong sariling DBMS at ang iyong sariling diyalekto para dito.

Bakit mahalagang tukuyin ang tamang diyalekto?

Ang bawat database ay maaaring may bahagyang magkakaibang uri ng data. Samakatuwid, upang ang Hibernate ay gumana nang eksakto sa paraang inaasahan mo mula rito, kailangan mong sabihin dito kung aling diyalekto ng wikang SQL ang kailangan nitong gamitin.

Narito ang isang kawili-wiling larawan na nagpapakita kung paano konektado ang lahat sa katotohanan:

5.4 Mga sikat na setting

Upang gawing mas madali ang iyong buhay, narito ang isang kumpletong listahan ng ilang mga setting:

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

Sinusuportahan ng MySQL 8.0 ang higit pang mga feature kaysa sa MySQL 5.0, kaya kung gusto mong sulitin ng Hibernate ang mga ito, pagkatapos ay tukuyin ang tamang dialect.

Ang database ng H2 ay karaniwang naka-imbak sa memorya, gayundin mem:testang parehong pangalan ng SQL server at ang pangalan ng schema na iyong gagawin.