- 論壇徽章:
- 0
|
[原創(chuàng)]一個Hibernate的開發(fā)指南
附上內(nèi)容,但此文圖片眾多,最好還是看帶圖片的版本:
http://bsd.huangdong.com/dev/hibernate/startup/startup.html
前言
Hibernate做為一個非常優(yōu)秀且已經(jīng)被大量使用的數(shù)據(jù)庫持久層工具已經(jīng)越來越成熟了。 本文主要是針對使用Hibernate的開發(fā)者,本章節(jié)主要是說明在《Hibernate開發(fā)指南》中所使用到的開發(fā)環(huán)境的初步設(shè)置, 并使用一個簡單的例子以說明Hibernate已經(jīng)正常運行。
本文所主要使用的工具有:
JDK: JDK 1.4.2
開發(fā)集成環(huán)境: Eclipse 2.1.2
Hibernate 2.1
數(shù)據(jù)庫:Oracle 9i
Hibernate的Eclipse插件: Tanghan Plugin
請先看看你的機(jī)器上是否已經(jīng)安裝這些軟件,對于數(shù)據(jù)庫,只是因為我的機(jī)器上已經(jīng)安裝了Oracle,使用其它的數(shù)據(jù)庫不會有太大的差別的。 我的例子還使用了一個struts的框架,因為我認(rèn)為web應(yīng)用框架中struts是一個非常不錯的選擇,而加上Hibernate這個數(shù)據(jù)庫訪問層, 兩者相匹配能達(dá)到更好的效果。為了使用Struts,也請確認(rèn)你安裝了以下軟件:
Web應(yīng)用服務(wù)器: Tomcat 4.x
Struts 1.1包
Eclipse的J2EE集成插件: MyEclipse 2.7RC1 以上版本(2.7開始提供struts的支持)
如果你不想使用MyEclipse這個商用的插件,也可以使用lomboz和easystruts來代替它的功能。 具體的軟件安裝和插件安裝不在這里多說,以下我們來說說 它們安裝后的配置。
軟件配置
我們先來配置數(shù)據(jù)庫,同時記下數(shù)據(jù)庫開發(fā)時所需要的相關(guān)信息。
Oracle相關(guān)配置參數(shù)
我在Oracle中建立了一個單獨的用戶:HD,設(shè)置其密碼為:abc。為該用戶分配好相應(yīng)的數(shù)據(jù)庫空間, 細(xì)致的配置方法和信息不再多說,總之你需要得到類似下面的信息以備開發(fā)時所使用:
機(jī)器地址:hdibm(因為是在本機(jī)還可以使用localhost和127.0.0.1,如果是另一臺機(jī)器使用該機(jī)器的IP地址)
oracle的偵聽端口:1521
數(shù)據(jù)庫實例名:hdorc
訪問用戶名:hd
訪問密碼:abc
需要注意的是要給HD用戶分配至少Connect的角色。另外在他所使用的表空間中分配足夠或是無限制的限額大小,否則在開發(fā)時都會遇到問題。 除這些之外還需要你從安裝的Oracle或Oracle網(wǎng)站上下載最新的JDBC包,它有兩個包,其中一個是與JDK相關(guān)的驅(qū)動,另一個是多語言支持包(這里我們不使用OCI的驅(qū)動,使用Thin的驅(qū)動)。 因為我使用的JDK為1.4所以驅(qū)動包我使用了 ojdbc14.jar ,JDK1.4使用的多語言支持包與JDK1.2相同都是 nls_charset12.jar 。
在數(shù)據(jù)庫中我們建立一些表以用于程序開發(fā),以一個簡單的用戶管理為例我們先建立一個簡單的用戶表(sysuser):
表名:sysuser
用戶ID:userid(vchar:32)
用戶名:username(vchar:20)
用戶密碼:userpasword(vchar:20)
用戶最后登錄時間:lastlogin(date)
你也可以使用這個sql語句來創(chuàng)建表:
CREATE TABLE "HD"."SYSUSER" ("USERID" VARCHAR2(32) NOT NULL,
"USERNAME" VARCHAR2(20) NOT NULL, "USERPASWORD" VARCHAR2(20)
NOT NULL, "LASTLOGIN" DATE, PRIMARY KEY("USERID" ,
UNIQUE("USERNAME" )
TABLESPACE "USERS"
Tomcat安裝
Tomcat的安裝則非常簡單了,從Tomcat網(wǎng)站上下載相關(guān)的安裝包,解到相關(guān)的目錄就可以了。安裝Tomcat之后你需要記下以下信息:
Tomcat的安裝目錄
Tomcat的偵聽端口(默認(rèn)為8080)
配置Hibernate for Eclipse的插件Tanghan Plugin
初次使用這個插件時會有許多人無從下手,主要是不知從哪里使用這個插件。 首先要打開這個插件提供的兩個視圖: Database Access View 和 Database Data View 。 通過菜單上的窗口 >; 顯示視圖 >; 其它來選擇這兩個視圖:
打開Database Access View視圖,我們來配置Oracle的驅(qū)動,用鼠標(biāo)右鍵點Oracle Thin Driver >; 修改驅(qū)動程序信息:
這里:
驅(qū)動名稱:Oracle Thin Driver
驅(qū)動程序包名:瀏覽選擇你的ojdbc14.jar文件
驅(qū)動程序類:oracle.jdbc.driver.OracleDriver
驅(qū)動程序前綴:jdbc racle:thin: < username >; @ < password >; // < server >; [: < 1521 >; ] / < database_name >; (這里是最新的驅(qū)動的URL書寫方法,具體的最好看一下相關(guān)Oracle驅(qū)動的有關(guān)URL的說明)
配置好驅(qū)動程序后我們來增加一個數(shù)據(jù)庫連接:
這里:
數(shù)據(jù)庫連接名:HDTestDB
驅(qū)動名稱:Oracle Thin Driver(就是在上面我們建立的)
驅(qū)動程序類:oracle.jdbc.driver.OracleDriver
數(shù)據(jù)庫連接:jdb c racle:thin:hd@abc//hdibm:1521/hdorc
用戶名:hd
密碼:abc
接下來我們試著連接一下數(shù)據(jù)庫:
需要我們再選擇Shemas,從下拉列表中選擇 HD ,按 確定 按鈕。 如果能看到選擇Shemas對話框,哪么說明你的數(shù)據(jù)庫配置就沒有什么問題了。 我們可以在Database Access View中看到庫中的表及表結(jié)構(gòu):
配置MyEclipse
從 MyEclipse的網(wǎng)站 上下載到最新的MyEclipse的試用版以及Struts相關(guān)的TLD和Lib包。 安裝完MyEclipse后,配置Tomcat的使用。主要是配置清楚tomcat的相關(guān)路徑就可以了:
需要注意的是tomcat一定要使用一個JDK,而不是JRE,在tomcat的配置樹中可以選擇一個JDK以供Tomcat啟動使用:
接下來將從網(wǎng)站上下載的Struts包解開到文件系統(tǒng)中(也可以手工將Struts 1.1包中的lib和tld拆出),在MyEclipse中配置好Struts 1.1的相關(guān)包:
這些配置完成我們就可以建立一個簡單的項目了。
建立初始的Struts項目
我們先建立一個項目,為后續(xù)的深入開發(fā)做準(zhǔn)備,這個項目是一個簡單的框架,導(dǎo)入Tomcat部署支持、建立與Struts和Hibernate的庫路徑。
建立Web應(yīng)用項目
首先使用向?qū)Ы⒁粋Web Module Project:
輸入Web Project的相關(guān)信 息:
按圖中所示一一輸入。點完成建立Project。
為項目加入Tomcat部署支持
接下來為項目加入Tomcat部署支持:
在彈出的對話框中點Add,并在下拉框中選中Tomcat 4:
為Web應(yīng)用加入Struts支持
再為項目加入Struts支持:
在彈出的對話框中按下圖輸入信息:
這樣就為Web應(yīng)用項目加入了Struts支持,這一步會自動為項目加入Struts的支持包和Struts需要使用的TLD文件(Tag Lib說明文件)。之后我們可以看到:
為Web應(yīng)用加入Hibernate支持
Hibernate中有大量的jar,不建議大家全部加入,以下是你必須加入的jar包(這些包除hibernate2.jar在根下其它都在lib子目錄中):
hibernate2.jar:Hibernate的核心庫。
cglib2.jar:Hibernate用來實現(xiàn)PO字節(jié)碼的動態(tài)生成時所需要的庫。
commons-collections.jar:Apache Commons提供的比java.util.*功能更強(qiáng)的集合類。
commons-lang.jar:Apache Commons提供了擴(kuò)展java.lang.*的功能。
commons-logging.jar:Apache Commons提供的一個通用日志接口工具。它會使用Log4j、JDK的java.util.logging、commons-logging的Simple Logger的順序來尋找可用的log API。
dom4j.jar:一個訪問XML的java接口實現(xiàn),Hibernate使用該包來完成XML的操作。
odmg.jar:ODMG是一個ORM的規(guī)范,Hibernate使用這個包實現(xiàn)了ODMG規(guī)范。
xalan.jar、xerces.jar和xml-apis.jar:XSLT處理器、SAX解析、標(biāo)準(zhǔn)JAXP API包,都是用于XML的處理。(大多應(yīng)用服務(wù)器帶有這三個包)
以下包依據(jù)你應(yīng)用中的情況做為選項可以加入,由你自己來定了:
c3p0.jar:C3PO數(shù)據(jù)庫連接池所使用的包。
commons-dbcp.jar和commons-pool.jar:Apache Commons提供的名為DBCP的數(shù)據(jù)庫連接池所使用的包。
jboss-cache.jar、concurrent.jar、jboss-common.jar、jboss-jmx.jar、jboss-system.jar:TreeCache所使用的包,它實現(xiàn)了一個可以集群的cache。
connector.jar:標(biāo)準(zhǔn)JCA API包。大多應(yīng)用服務(wù)器都帶了。
(*)ehcache.jar:EHCache cache包,Hibernate默認(rèn)使用這個包來完成cache功能。
jaas.jar:標(biāo)準(zhǔn)JAAS API包。大多應(yīng)用服務(wù)器也帶有這個包,這個包是供JCA來使用的。(JDK 1.4也已經(jīng)包含這個包了)
jcs.jar:JCS cache包。
jdbc2_0-stdext.jar:標(biāo)準(zhǔn)JDBC 2.0 API擴(kuò)展包。大多應(yīng)用服務(wù)器也包含了這個包。
swarmcache.jar和jgroups.jar:SwarmCache可復(fù)制的分布式Cache所使用的包。它使用JavaGroups進(jìn)行組通訊,適合于集群環(huán)境的數(shù)據(jù)庫應(yīng)用Cache。
(*)jta.jar:標(biāo)準(zhǔn)JTA API包。大多數(shù)應(yīng)用服務(wù)器也帶有這個包。
log4j.jar:Log4包,Log4j是Logger工具中一個非常好的選擇。
oscache.jar:由OpenSymphony所提供的OSCache包,用于數(shù)據(jù)庫的Cache。
proxool.jar:Proxool JDBC數(shù)據(jù)庫連接池包。
還有一些其它的包,都不是運行時刻所使用的包,附在這里以做了解了:
ant.jar:編譯Hibernat時使用的ant核心包。
junit.jar:JUnit測試框架包,編譯時為測試代碼進(jìn)行測試所使用的。
optional.jar:Ant使用的輔助包,包括了一些附加的task。
加入包的方法很簡單,使用資源管理器將jar文件拖入web目錄下的WEB-INF中的lib目錄就可以了。 MyEclipse會自動將該目錄中的所有的jar文件加入到project的編譯classpath中去的。 注意,除必須的包之外,前面有(*)的包也請加入到項目中去。由于是使用Tomcat,在必須的包中的有關(guān)XML包也可以不加入。如下圖:
為Web應(yīng)用加入JDBC驅(qū)動包
將之前準(zhǔn)備好的Oracle驅(qū)動包也加入到Web項目中。主要是這兩個文件:
nls_charset12.jar
ojdbc14.jar
下圖是配置到最后所有的包的列表,也請大家一一核對:
配置Hibernate的配置文件
配置Hibernate數(shù)據(jù)庫連接配置
數(shù)據(jù)庫的連接配置很簡單,在項目的 src目錄 下建立一個xml文件,名為 hibernate.cfg.xml 。這個文件的內(nèi)容為:
<?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="dialect">;net.sf.hibernate.dialect.Oracle9Dialect</property>;
<property name="connection.driver_class">;oracle.jdbc.driver.OracleDriver</property>;
<property name="connection.username">;hd</property>;
<property name="connection.password">;abc</property>;
<property name="connection.url">;jdbc racle:thin localhost:1521:hdorc</property>;
<property name="connection.pool.size">;1</property>;
<property name="statement_cache.size">;25</property>;
<property name="jdbc.fetch_size">;50</property>;
<property name="jdbc.batch_size">;30</property>;
<property name="show_sql">;true</property>;
<!-- Mapping files -->;
<mapping resource="com/huangdong/demo/dao/SysUser.hbm.xml"/>;
</session-factory>;
</hibernate-configuration>;
我們對這里的各個property元素一一說明:
dialect:使用了Oracle9的對照
connection.driver_class:Oracle的JDBC驅(qū)動類名
connection.username:Oracle數(shù)據(jù)庫訪問用戶名
connection.password:Oracle數(shù)據(jù)庫訪問密碼
connection.url:Oracle數(shù)據(jù)庫訪問URL
connection.pool.size:數(shù)據(jù)庫連接池大小
statement_cache.size:JDBC statement緩沖大小
jdbc.fetch_size:設(shè)定JDBC的Statement讀取數(shù)據(jù)的時候每次從數(shù)據(jù)庫中取出的記錄條數(shù)
jdbc.batch_size:設(shè)定對數(shù)據(jù)庫進(jìn)行批量刪除,批量更新和批量插入的時候的批次大小
show_sql:設(shè)定是否在控制臺上顯示向數(shù)據(jù)庫提交的SQL語句,在開發(fā)調(diào)試時比較有用
提下來的mapping resource則是我們對數(shù)據(jù)庫表的一個個的映射文件的清單,我們下面會對SYSUSER表進(jìn)行映射,所以現(xiàn)在就已經(jīng)加了進(jìn)去。 而這個xml會放在com.huangdong.demo.dao包中,所以要把load時的路徑也寫進(jìn)來。
配置Hibernate表映射
在Database Access View中選擇SYSUSER表,在菜單中選擇生成HBM文件:
在向?qū)υ捒蛑邪聪聢D輸入相關(guān)信息:
按完成按鈕后,就會在com.huangdong.demo.dao包中生成SysUser類和SysUser.hb.xml文件。
由于在Java中使用java.util.Date有很多不方便的地方,所以我將lastlogin的映射后的java屬性改為了calendar。
這是修改后的SysUser.hbm.xml文件:
<?xml version="1.0" encoding="UTF-8"?>;
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 2.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">;
<hibernate-mapping>;
<class name="com.huangdong.demo.dao.SysUser" table="SYSUSER">;
<id column="userid" length="32" name="userid" type="string">;
<generator class="uuid.hex"/>;
</id>;
<property column="username" length="20" name="username" not-null="true" type="string" unique="true"/>;
<property column="userpasword" length="20" name="userpasword" not-null="true" type="string"/>;
<property column="lastlogin" length="7" name="lastlogin" type="calendar"/>;
</class>;
</hibernate-mapping>;
這是修改后的SysUser.java文件:
package com.huangdong.demo.dao;
import java.io.Serializable;
import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.apache.commons.lang.builder.ToStringBuilder;
/** @author Hibernate CodeGenerator */
public class SysUser implements Serializable {
/** identifier field */
private String userid;
/** persistent field */
private String username;
/** persistent field */
private String userpasword;
/** nullable persistent field */
private java.util.Calendar lastlogin;
/** full constructor */
public SysUser(java.lang.String username, java.lang.String userpasword, java.util.Calendar lastlogin) {
this.username = username;
this.userpasword = userpasword;
this.lastlogin = lastlogin;
}
/** default constructor */
public SysUser() {
}
/** minimal constructor */
public SysUser(java.lang.String username, java.lang.String userpasword) {
this.username = username;
this.userpasword = userpasword;
}
public java.lang.String getUserid() {
return this.userid;
}
public void setUserid(java.lang.String userid) {
this.userid = userid;
}
public java.lang.String getUsername() {
return this.username;
}
public void setUsername(java.lang.String username) {
this.username = username;
}
public java.lang.String getUserpasword() {
return this.userpasword;
}
public void setUserpasword(java.lang.String userpasword) {
this.userpasword = userpasword;
}
public java.util.Calendar getLastlogin() {
return this.lastlogin;
}
public void setLastlogin(java.util.Calendar lastlogin) {
this.lastlogin = lastlogin;
}
public String toString() {
return new ToStringBuilder(this)
.append("userid", getUserid())
.toString();
}
public boolean equals(Object other) {
if ( !(other instanceof SysUser) ) return false;
SysUser castOther = (SysUser) other;
return new EqualsBuilder()
.append(this.getUserid(), castOther.getUserid())
.isEquals();
}
public int hashCode() {
return new HashCodeBuilder()
.append(getUserid())
.toHashCode();
}
}
建立測試用的Servlet
創(chuàng)建Servlet框架
使用新建Servlet的向?qū)覀儊斫⒁粋測試用的Servlet,下圖是新建Servlet時輸入的參數(shù)和選項:
在下一步的XML Wizard對話框中記得將 Display Name 和 Description 的“Test System Function Servlet”都清除,如下圖所示:
這樣就建立了一個初始的Servlet框架。
編寫數(shù)據(jù)庫連接獲取類
我們編寫一個單獨的類,用于從SessionFactory中獲取數(shù)據(jù)庫連接session。這個類名為HibernateUtil,我們將其放于com.huangdong.demo.util包中,具體的代碼如下:
package com.huangdong.demo.util;
import net.sf.hibernate.HibernateException;
import net.sf.hibernate.Session;
import net.sf.hibernate.SessionFactory;
import net.sf.hibernate.cfg.Configuration;
public class HibernateUtil {
private static final SessionFactory sessionFactory;
static {
try {
sessionFactory =
new Configuration().configure().buildSessionFactory();
} catch (HibernateException ex) {
throw new RuntimeException(
"Exception building SessionFactory: " + ex.getMessage(),
ex);
}
}
public static final ThreadLocal session = new ThreadLocal();
public static Session currentSession() throws HibernateException {
Session s = (Session) session.get();
// Open a new Session, if this Thread has none yet
if (s == null) {
s = sessionFactory.openSession();
session.set(s);
}
return s;
}
public static void closeSession() throws HibernateException {
Session s = (Session) session.get();
session.set(null);
if (s != null)
s.close();
}
}
我們可以通過currentSession方法來獲取數(shù)據(jù)庫連接,如果系統(tǒng)中有可用的session就會反回可用的,如果沒有時才會創(chuàng)建一個新的session。當(dāng)session操作完成后,需要操作者使用closeSession方法釋放使用的session。
建立測試Bean
接下來我們建立一個TestHibernate的Java Bean,主要加入一些Hibernate的測試方法,以下是建立該類所輸入的相關(guān)信息:
我們?yōu)樵擃惣尤胍粋向數(shù)據(jù)庫中增加數(shù)據(jù)的方法:
public boolean TestAdd() {
try {
Session session = HibernateUtil.currentSession();
Transaction tx = session.beginTransaction();
SysUser user = new SysUser();
user.setUsername("丫丫" ;
user.setUserpasword("uhkuhkqepdwqi" ;
user.setLastlogin(Calendar.getInstance());
session.save(user);
tx.commit();
HibernateUtil.closeSession();
} catch (HibernateException e) {
e.printStackTrace();
return false;
}
return true;
}
第一次我寫這個代碼時感到非常的意外,總感覺應(yīng)該再多寫點什么,但是真的是這 樣,我們只用了這么幾句話就向數(shù)據(jù)庫加入了一條記錄。
在Servlet中調(diào)用TestAdd方法
這就很簡單了,更改TestServlet.java類的doGet方法,初始化TestHibernate類,并調(diào)用TestAdd方法就可以了:
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html; charset=GBK" ;
PrintWriter out = response.getWriter();
out.println(
"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">;" ;
out.println("<HTML>;" ;
out.println(" <HEAD>;<TITLE>;A Servlet</TITLE>;</HEAD>;" ;
out.println(" <BODY>;" ;
//調(diào)用Test Add
TestHibernate test = new TestHibernate();
out.println("TestAdd:" + test.TestAdd() + "<p>;" ;
out.println(" </BODY>;");
out.println("</HTML>;");
out.flush();
out.close();
}
如果TestAdd方法執(zhí)行成功則會在頁面上返回True,否則會返回False。下面我們就來測試一把。
測試我們第一個基于Servlet的Hibernate應(yīng)用
啟動Tomcat
如果之前按本文配置好了Tomcat的部署,哪么這里就不會有任何問題,如圖操作則會進(jìn)入Eclipse的調(diào)試視圖:
在Debug視圖中看到所有的線程啟動,并在控制臺窗口中看到“Starting Coyote HTTP/1.1 on port 8080”則說明Tomcat啟動成功并偵聽了8080端口,如下圖:
打開瀏覽器,在地址欄中輸入:
http://localhost:8080/Demo/servlet/TestServlet
如果返回的頁面如下圖所示,則代表數(shù)據(jù)庫更新成功:
同時在Eclipse的控制臺中我們可以看到Hibernate的log輸出,說明了它工作的細(xì)節(jié)情況 :
2003-12-26 15:10:37 net.sf.hibernate.cfg.Environment <clinit>;
信息: Hibernate 2.1.1
2003-12-26 15:10:37 net.sf.hibernate.cfg.Environment <clinit>;
信息: hibernate.properties not found
2003-12-26 15:10:37 net.sf.hibernate.cfg.Environment <clinit>;
信息: using CGLIB reflection optimizer
2003-12-26 15:10:37 net.sf.hibernate.cfg.Configuration configure
信息: configuring from resource: /hibernate.cfg.xml
2003-12-26 15:10:37 net.sf.hibernate.cfg.Configuration getConfigurationInputStream
信息: Configuration resource: /hibernate.cfg.xml
2003-12-26 15:10:38 net.sf.hibernate.cfg.Configuration addResource
信息: Mapping resource: com/huangdong/demo/dao/SysUser.hbm.xml
2003-12-26 15:10:38 net.sf.hibernate.cfg.Binder bindRootClass
信息: Mapping class: com.huangdong.demo.dao.SysUser ->; SYSUSER
2003-12-26 15:10:39 net.sf.hibernate.cfg.Configuration doConfigure
信息: Configured SessionFactory: null
2003-12-26 15:10:39 net.sf.hibernate.cfg.Configuration secondPassCompile
信息: processing one-to-many association mappings
2003-12-26 15:10:39 net.sf.hibernate.cfg.Configuration secondPassCompile
信息: processing one-to-one association property references
2003-12-26 15:10:39 net.sf.hibernate.cfg.Configuration secondPassCompile
信息: processing foreign key constraints
2003-12-26 15:10:39 net.sf.hibernate.dialect.Dialect <init>;
信息: Using dialect: net.sf.hibernate.dialect.Oracle9Dialect
2003-12-26 15:10:39 net.sf.hibernate.cfg.SettingsFactory buildSettings
信息: JDBC result set fetch size: 50
2003-12-26 15:10:39 net.sf.hibernate.cfg.SettingsFactory buildSettings
信息: Use outer join fetching: true
2003-12-26 15:10:39 net.sf.hibernate.connection.DriverManagerConnectionProvider configure
信息: Using Hibernate built-in connection pool (not for production use!)
2003-12-26 15:10:39 net.sf.hibernate.connection.DriverManagerConnectionProvider configure
信息: Hibernate connection pool size: 20
2003-12-26 15:10:39 net.sf.hibernate.connection.DriverManagerConnectionProvider configure
信息: using driver: oracle.jdbc.driver.OracleDriver at URL: jdbc racle:thin localhost:1521:hdorc
2003-12-26 15:10:39 net.sf.hibernate.connection.DriverManagerConnectionProvider configure
信息: connection properties: {user=hd, password=abc, pool.size=1}
2003-12-26 15:10:39 net.sf.hibernate.transaction.TransactionManagerLookupFactory getTransactionManagerLookup
信息: No TransactionManagerLookup configured (in JTA environment, use of process level read-write cache is not recommended)
2003-12-26 15:10:45 net.sf.hibernate.cfg.SettingsFactory buildSettings
信息: Use scrollable result sets: true
2003-12-26 15:10:45 net.sf.hibernate.cfg.SettingsFactory buildSettings
信息: JDBC 2 max batch size: 30
2003-12-26 15:10:45 net.sf.hibernate.cfg.SettingsFactory buildSettings
信息: echoing all SQL to stdout
2003-12-26 15:10:45 net.sf.hibernate.cfg.SettingsFactory buildSettings
信息: Query language substitutions: {}
2003-12-26 15:10:45 net.sf.hibernate.cfg.SettingsFactory buildSettings
信息: cache provider: net.sf.ehcache.hibernate.Provider
2003-12-26 15:10:45 net.sf.hibernate.cfg.Configuration configureCaches
信息: instantiating and configuring caches
2003-12-26 15:10:46 net.sf.hibernate.impl.SessionFactoryImpl <init>;
信息: building session factory
2003-12-26 15:10:47 net.sf.hibernate.impl.SessionFactoryObjectFactory addInstance
信息: no JNDI name configured
Hibernate: insert into SYSUSER (username, userpasword, lastlogin, userid) values (?, ?, ?, ?)
在最后我們可以看到Hibernate生成的數(shù)據(jù)庫操作語句。走到這里可以說你已經(jīng)成功的運行了許多東西。讓我們再列出來,請你一一考慮一下它們是如何被你運行和部署起來的,它們有什么:
Eclipse
MyEclipse
Tomcat
Oracle/Oracle JDBC Driver
Hibernate
Struts(其實到現(xiàn)在我們還沒有使用到它的功能)
查看表中的數(shù)據(jù)是否更新
在Database Access View中可以很方便的查看數(shù)據(jù)表中的數(shù)據(jù):
這樣就在Database Data View中看到了SYSUSER表中的數(shù)據(jù):
留在最后的話
本文只是簡單的給大家介紹了開發(fā)基于Java的Web應(yīng)用的基礎(chǔ)環(huán)境,同時介紹了一系列的開發(fā)工具和組件。 這些工具還有更多的功能,這里就不再一一介紹了,請大家多參考Eclipse、MyEclipse的說明文檔,它們還有許多豐富的功能。 對于Struts和Hibernate這兩個強(qiáng)大的組件最在后續(xù)的文章中再慢慢說明。
如果你對本文有什么意見和建議請 聯(lián)系我 ,告訴我你的想法,另外也可以到 技術(shù)天空BBS的Java版 中討論與Java相關(guān)的各種技術(shù)。
你可以從 這里 下載到完整的Eclipse Project包。
另外本文中的所有代碼在以下環(huán)境中由作者實際測試完全沒有問題:
Eclipse 2.1.2
Struts 1.1
Hibernate 2.1.1
Tomcat 4.1.29/Jetty 4.2.15
com.tanghan.plugin_0.1.0.12.21
JDK 1.4.2_02 For Windows/FreeBSD 4.8/FreeBSD 4.9
FreeBSD 4.8/FreeBSD 4.9/Windows 2000/Windows XP
Oracle 9.2.0.1.0 |
|