轉載 http://www.diybl.com/course/3_program/java/javajs/2008819/136428.html 了Hibernate的主要組件

Hibernate第一天

1.下載Hibernate
Hibernate Home Page總要知道:http://www.hibernate.org/
改網站介紹了Hibernate的主要組件:


Hibernate Core
Hibernate的核心部分,主要用於Java開發,本地API以及XML映射元數據
Hibernate Annotations
:一些Map類,用於JDK 5.0+annotations
Hibernate EntityManager
:標準的Java持久化API,用於SEEE
Hibernate Shards
:水平數據分區框架
Hibernate Validator
:數據集成annotations和驗證API
Hibernate Search
HibernateLucence集成,用於索引和檢索數據
ibernate Tools
:用於EclipseAnt開發
NHibernate
:用於.Net服務的Hibernate
JBoss Seam
:用於JSFAjaxEJB 3.0/Java EE 5.0用用程序的框架

 

這些功能中,Hibernate Core自然是核心和基礎了,所以還是從Hibernate Core開始學習。
下載到Hibernate Core之後,將其解壓縮到本地目錄H_Home。例如D:/common/hibernate-distribution-3.3.0.GA
在發佈包中,包含了Hibernate的五種語言的文檔。
Hibernate
依賴的類庫,筆者使用的Hibernate的版本爲3.3.0,在lib文件夾中,Hibernate已經將依賴的類庫進行了組織,其中required目錄下的類庫爲必須使用的類庫。
project目錄中包含了HibernateMaven工程。

 

2.既然已經準備好了Hibernate,那麼就根據Hibernate的教程進行學習吧。
首先開始第一個樣例程序的學習。
學習點一    HSQLDB轉換爲MySQL
(HSQLDB
是一個輕量級的100% JavaSQL數據庫引擎,參考http://hsqldb.org/)
之所以將HSQLDB切換爲MySQL只是爲了熟悉進行數據庫切換的辦法,畢竟產品開發時,數據庫一般不會使用HSQLDB
>
下載並安裝MySQL5(注意將charset設置爲UTF-8)
>
下載MySQL Java Connector
>
修改樣例程序的Hibernate Configuration如下:


<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost:3306/hibernate</property>
<property name="connection.username">root</property>
<property name="connection.password">password</property>

<!-- JDBC connection pool (use the built-in) -->
<property name="connection.pool_size">15</property>

<!-- SQL dialect -->
<property name="dialect">org.hibernate.dialect.MySQL5Dialect</property>

 

注意,在上面的配置中,基本上前面四行是必須修改的,但是筆者在第一次配置時,沒有將dialect進行對應的修改,導致運行時發生了錯誤。
因爲不同的dialect會生成針對不同數據庫的SQL語句。
例如如果使用教程中的org.hibernate.dialect.HSQLDialect,那麼在運行時就會提示控制檯錯誤:

 

[java] 01:19:38,125 DEBUG SchemaExport:377 - drop table EVENTS if exists
[java] 01:19:38,125 DEBUG SchemaExport:362 - Unsuccessful: drop table EVENTS if exists
[java] 01:19:38,125 DEBUG SchemaExport:363 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'if exists' at line 1
[java] 01:19:38,125 DEBUG SchemaExport:377 - create table EVENTS (EVENT_ID bigint generated by default as identity (start with 1), EVENT_DATE timestamp, title varchar(255), primary key (EVENT_ID))
[java] 01:19:38,140 ERROR SchemaExport:348 - Unsuccessful: create table EVENTS (EVENT_ID bigint generated by default as identity (start with 1), EVENT_DATE timestamp, title varchar(255), primary key (EVENT_ID))
[java] 01:19:38,140 ERROR SchemaExport:349 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'generated by default as identity (start with 1), EVENT_DATE timestamp, title var' at line 1

 

當切換爲正確的org.hibernate.dialect.MySQL5Dialect時,控制檯日誌如下:

 

[java] 01:21:45,187 DEBUG SchemaExport:377 - drop table if exists EVENTS
[java] 01:21:45,203 DEBUG SchemaExport:377 - create table EVENTS (EVENT_ID bigint not null auto_increment, EVENT_DATE datetime, title varchar(255), primary key (EVENT_ID))
[java] 01:21:45,203  INFO SchemaExport:268 - schema export complete
[java] Hibernate: insert into EVENTS (EVENT_DATE, title) values (?, ?)

 

所以在切換數據庫類型時,一定要將dialect也進行切換。(詳細的配置信息參考H_HOME/project/etc/hibernate.properties)

 

3.配置日誌
現在的Hibernate使用了SLF4J作爲日誌機制。在運行時,需要進行動態的配置日誌。
現在使用比較多的是Log4j,此時需要進入H_HOME,將H_HOME/project/etc下面的log4j.properties拷貝到Hibernate工程的src目錄下,在需要的情況下,可以對log4j.properties進行自定義的配置。
但是僅僅拷貝改爲見還是不可以的,必須將以下兩個類庫拷貝到類路徑中:

否則就會在控制檯打印如下錯誤:
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".(缺少slf4j-log4j12-1.5.2.jar)
Initial SessionFactory creation failed.java.lang.NoClassDefFoundError: org/apache/log4j/Level(
缺少log4j-1.2.12.jar)

 

4.關於drop-recreate
hibernate.cfg.xml配置中,教程中的配置文件包含如下的內容:
<!-- Drop and re-create the database schema on startup -->
<property name="hbm2ddl.auto">create</property>
改配置會在每次創建數據庫表之前先將表drop。這樣如果在運行EventManager時,如果先執行一次store,再執行一次list,就看不到任何記錄。
所以在運行時,一旦數據庫表創建成功,那麼就需要關閉該配置。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章