?? hibernate2 參考文檔之一.txt
字號:
前言
Prev Next
--------------------------------------------------------------------------------
前言
在今日的企業環境中,把面向對象的軟件和關系數據庫一起使用可能是相當麻煩、浪費時間的。Hibernate是一個面向Java環境的對象/關系數據庫映射工具。對象/關系數據庫映射(object/relational mapping (ORM))這個術語表示一種技術,用來把對象模型表示的對象映射到基于SQL的關系模型結構中去。
Hibernate不僅僅管理Java類到數據庫表的映射,還提供數據查詢和獲取數據的方法,可以大幅度減少開發時人工使用SQL和JDBC處理數據的時間。Hibernate的目標是對于開發者通常的數據持久化相關的編程任務,解放其中的95%。
如果你對Hibernate和對象/關系數據庫映射還是個新手,或者甚至對Java也不熟悉,請按照下面的步驟來學習。
閱讀這個30分鐘就可以結束的Chapter 1, 在Tomcat中快速上手,它使用Tomcat。
閱讀Chapter 2, 體系結構來理解Hibernate可以使用的環境。
查看Hibernate發行包中的eg/目錄,里面有一個簡單的獨立運行的程序。把你的JDBC驅動拷貝到lib/目錄下,修改一下src/hibernate.properties,指定其中你的數據庫的信息。進入命令行,切換到你的發行包的目錄,輸入ant eg(使用了Ant),或者在Windows操作系統中使用build eg。
把這份參考文檔作為你學習的主要信息來源。
在Hibernate 的網站上可以找到經常提問的問題與解答(FAQ)。
在Hibernate網站上還有第三方的演示、示例和教程的鏈接。
Hibernate網站的“社區(Community Area)”是討論關于設計模式以及很多整合方案(Tomcat, JBoss, Spring,Struts, EJB,等等)的好地方。
離線版本的Hibernate網站隨著Hibernate發行包一起發布,位于doc/目錄下。
如果你有問題,請使用Hibernate網站上鏈接的用戶論壇。我們也提供一個JIRA問題追蹤系統,來搜集bug報告和新功能請求。如果你對開發Hibernate有興趣,請加入開發者的郵件列表。 (譯者注:目前Hibernate已經有一個中文的用戶論壇,URL是http://forum.hibernate.org.cn 我們隨時歡迎您的訪問。)
翻譯說明
=========================================================
本文檔的翻譯是在網絡上協作進行的,也會不斷根據Hibernate的升級進行更新。提供此文檔的目的是為了減緩學習Hibernate的坡度,而非代替原文檔。我們建議所有有能力的讀者都直接閱讀英文原文。
若您對翻譯有異議,或發現翻譯錯誤,敬請不吝賜教,請到Hibernate中文論壇(http://forum.hibernate.org.cn)提出,或報告到如下email地址:caoxg at redsaga.com
第6章(集合類)、第7章(組件)是由jlinux翻譯,第10章(父子關系)是由muziq翻譯,第16章(事務和并行)、第17章(映射實例)是由liangchen翻譯,其他各章節是由曹曉鋼翻譯的,第18、19、20章,bruce、robbin也有貢獻。曹曉鋼也進行了全書從2.0.4更新到2.1.1版本、2.1.2版本的工作。
更詳細的翻譯者與翻譯更新情況,請查閱CVS目錄下的TRANSLATE-LOG.TXT文件。
版權聲明
=========================================================
Hibernate英文文檔屬于Hibernate發行包的一部分,遵循LGPL協議。本翻譯版本同樣遵循LGPL協議。參與翻譯的譯者一致同意放棄除署名權外對本翻譯版本的其它權利要求。
您可以自由鏈接、下載、傳播此文檔,或者放置在您的網站上,甚至作為產品的一部分發行。但前提是必須保證全文完整轉載,包括完整的版權信息和作譯者聲明。這里“完整”的含義是,不能進行任何刪除/增添/注解。若有刪除/增添/注解,必須明確聲明那些部分并非本文檔的一部分。
--------------------------------------------------------------------------------
Prev Up Next
HIBERNATE - 符合Java習慣的關系數據庫持久化 Home Chapter 1. 在Tomcat中快速上手
Chapter 1. 在Tomcat中快速上手
Prev Next
--------------------------------------------------------------------------------
Chapter 1. 在Tomcat中快速上手
1.1. 開始Hibernate之旅
這份教程討論如何在Apache Tomcat servlet容器中為web程序安裝Hibernate 2.1。Hibernate在大多數主流J2EE應用服務器 的受管理環境中都可以良好運作,也可以作為獨立應用程序運行。在本例中的示例數據庫系統是PostgreSQL 7.3,當然也可以 很容易的換成Hibernate 支持的其它16種數據庫之一。
第一步是拷貝所有需要的運行庫到Tomcat去。在這篇教程中,我們使用一個單獨的web程序(webapps/quickstart)。我們要考慮全局庫文件搜索路徑(TOMCAT/common/lib)和本web應用程序上下文的類裝載器搜索路徑(對于jar來說是webapps/quickstart/WEB-INF/lib,對于class文件來說是webapps/quickstart/WEB-INF/classes)。我們把這兩個類裝載器級別分別稱為全局類路徑(global classpath)和上下文類路徑(context classpath)。
首先,把數據庫需要的JDBC驅動拷貝到全局類路徑。這是tomcat附帶的DBCP連接池軟件所要求的。對于本教程來說,把pg73jdbc3.jar庫文件(對應PostgreSQL 7.3和JDK 1.4)到全局類裝載器路徑去。如果你使用一個不同的數據庫,拷貝相應的JDBC 驅動)。
不要拷貝任何其他東西到全局類裝載器去。否則你可能在一些工具上遇到麻煩,比如log4j, commons-logging等。 記得要使用每個web應用程序自己的上下文類路徑,就是說把你自己的類庫拷貝到WEB-INF/lib下去,把配置文件configuration/property拷貝到WEB-INF/classes下面去。這兩個目錄默認都是上下文類路徑級別的。
Hibernate本身打包成一個JAR庫。hibernate2.jar文件要和你應用程序的其他庫文件一起放在上下文類路徑中。在運行時,Hibernate還需要一些第三方庫,它們在Hibernate發行包的lib/目錄下。參見Table 1.1。把你需要的第三方庫文件也拷貝到上下文類路徑去。
要為Tomcat和Hibernate都配置數據庫連接。也就是說Tomcat要負責提供JDBC連接池,Hibernate通過JNDI來請求這些連接。Tomcat把連接池綁定到JNDI。
Table 1.1. Hibernate 第三方庫
庫 描述
dom4j (必需) Hibernate在解析XML配置和XML映射元文件時需要使用dom4j。
CGLIB (必需) Hibernate在運行時使用這個代碼生成庫強化類(與Java反射機制聯合使用)。
Commons Collections, Commons Logging (必需) Hibernat使用Apache Jakarta Commons項目提供的多個工具類庫。
ODMG4 (必需) Hibernate提供了一個可選的ODMG兼容持久化管理界面。如果你需要映射集合,你就需要這個類庫,就算你不是為了使用ODMG API。我們在這個教程中沒有使用集合映射,但不管怎樣把這個JAR拷貝過去總是不錯的。
Log4j (可選) Hibernate使用Commons Logging API,后者可以使用Log4j作為實施log的機制。如果把Log4j庫放到上下文類目錄中,Commons Logging就會使用Log4j和它在上下文類路徑中找到的log4j.properties文件。在Hibernate發行包中包含有一個示例的properties文件。所以,也把log4j.jar拷貝到你的上下文類路徑去吧。
其他文件是不是必需的? 請察看Hibernate發行包中的/lib/README.txt文件。這是一個Hibernate發行包中附帶的第三方類庫的列表,總是保持更新。你可以在那里找到所有必需或者可選的類庫的列表。
好了,現在所有的類庫已經被拷貝過去了,讓我們在Tomcat的主配置文件,TOMCAT/conf/server.xml中增加一個數據庫JDBC連接池的資源聲明,
<Context path="/quickstart" docBase="quickstart">
<Resource name="jdbc/quickstart" scope="Shareable" type="javax.sql.DataSource"/>
<ResourceParams name="jdbc/quickstart">
<parameter>
<name>factory</name>
<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
</parameter>
<!-- DBCP database connection settings -->
<parameter>
<name>url</name>
<value>jdbc:postgresql://localhost/quickstart</value>
</parameter>
<parameter>
<name>driverClassName</name><value>org.postgresql.Driver</value>
</parameter>
<parameter>
<name>username</name>
<value>quickstart</value>
</parameter>
<parameter>
<name>password</name>
<value>secret</value>
</parameter>
<!-- DBCP connection pooling options -->
<parameter>
<name>maxWait</name>
<value>3000</value>
</parameter>
<parameter>
<name>maxIdle</name>
<value>100</value>
</parameter>
<parameter>
<name>maxActive</name>
<value>10</value>
</parameter>
</ResourceParams>
</Context>
這個例子中我們要配置的上下文叫做quickstart,它位于TOMCAT/webapp/quickstart目錄。要訪問任何Servlet,在你的瀏覽器中訪問http://localhost:8080/quickstart就可以了。
Tomcat在這個配置下,使用DBCP連接池,通過JNDI位置:java:comp/env/jdbc/quickstart提供帶有緩沖池的JDBCConnections。如果你在讓連接池工作的時候遇到困難,請查閱Tomcat文檔。如果你得到了JDBC驅動的exception信息,請先不要用Hibernate,測試JDBC連接池本身是否正確。Tomcat和JDBC的教程可以在Web上查到。
下一步是配置hibernate,來使用綁定到JNDI的連接池中提供的連接。我們使用XML格式的Hibernate配置。當然,使用properties文件的方式在功能上也是一樣的,也不提供什么特別好處。我們用XML配置的原因,是因為一般會更方便。XML配置文件放在上下文類路徑(WEB-INF/classes)下面,稱為hibernate.cfg.xml:
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration
PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-2.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="connection.datasource">java:comp/env/jdbc/quickstart</property>
<property name="show_sql">false</property>
<property name="dialect">net.sf.hibernate.dialect.PostgreSQLDialect</property>
<!-- Mapping files -->
<mapping resource="Cat.hbm.xml"/>
</session-factory>
</hibernate-configuration>
我們關閉了SQL命令的log,告訴Hibernate使用哪種SQL數據庫方言(dialet),還有如何得到JDBC連接(通過聲明數據源池綁定的JNDI地址)。方言是必需的,因為不同的數據庫都和SQL "標準"有一些出入。Hibernate會替你照管這些差異之處,發行包包含了所有主流的商業和開放源代碼數據庫的方言。
SessionFactory是Hibernate的概念,對應一個數據存儲源,如果有多個數據庫,可以創建多個XML配置文件,也在你的程序中創建多個Configuration和SessionFactory對象。
在hibernate.cfg.xml中的最后一個元素聲明了Cat.hbm.xml是一個Hibernate XML映射文件,對應持久化類Cat。這個文件包含了把POJO類映射到數據庫表(或多個數據庫表)的元數據。我們稍后就回來看這個文件。讓我們先編寫這個POJO類,再在聲明它的映射元數據。
1.2. 第一個可持久化類
s Hibernate讓普通的Java對象(Plain Old Java Objects ,就是POJOs,有時候也稱作Plain Ordinary Java Objects)變成持久化類。一個POJO很像JavaBean,屬性通過getter和setter方法訪問,對外隱藏了內部實現的細節。
package net.sf.hibernate.examples.quickstart;
public class Cat {
private String id;
private String name;
private char sex;
private float weight;
public Cat() {
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public char getSex() {
return sex;
}
public void setSex(char sex) {
this.sex = sex;
}
public float getWeight() {
return weight;
}
public void setWeight(float weight) {
this.weight = weight;
}
}
Hibernate對屬性使用的類型不加限制。所有的Java JDK類型和原始類型(比如String,char和float)都可以被映射,也包括Java 集合框架(Java collections framework)中的類。你可以把它們映射成為值,值集合,或者與其他實體相關聯。id是一個特殊的屬性,代表了這個類的數據庫標識符(主鍵),它對于類似于Cat這樣的實體是必需的。
持久化類不需要實現什么特別的接口,也不需要從一個特別的持久化根類繼承下來。Hibernate也不需要使用任何編譯期處理,比如字節碼增強操作,它獨立的使用Java反射機制和運行時類增強(通過CGLIB)。所以,在Hibernate中,POJO的類不需要任何前提條件,我們就可以把它映射成為數據庫表。
1.3. 映射cat
Cat.hbm.xml映射文件包含了對象/關系映射所需的元數據。
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -