转自:Demo - 在WSAD 5.1上使用Hibernate 2.1beta6
Roberto Nie, Roberto_nie@163.com
December 25, 2003
Summary
本文介绍在WSAD5.1下实现一个最简单的hibernate实例。
Environment
OS: Windows XP SP1 简体中文版
MEM: 512M
Requirement:
Hibernate 2.1 beta6
Hibernate eclipse plug in 0.9.6
WSAD 5.1
DB2 8.1
Steps:
1:建立demo数据库和表:
在DB2数据库中创建demo数据库,
CREATE DATABASE DEMO;
创建表demo,
CREATE TABLE DB2ADMIN.DEMO
(ID INTEGER NOT NULL,
NAME VARCHAR(100)
)
2::建立一个新的web应用程序
点击“文件”->“新建”->“项目”,在弹出的对话框中,选择“j2ee”, 和“企业级应用程序”,点击下一步,选择“创建j2ee 1.3企业应用程序项目”,点击下一步,项目名称填写demo,点击下一步,在新弹出的对话框中选择“新建模块”,仅仅选择“web项目”,点击完成。
3:配置WAS应用服务器自带的数据库连接池。
创建服务器:
打开服务器透视图,右键点击“服务器”,选择“新建/服务器和服务器配置”,服务器名称填写“was5”,然后选择webSphere V5.0 测试环境,点击完成。
配置JNDI:
在服务器透视图中的服务器配置窗口中打开was5服务器配置,选择“安全性”标签栏,在JAAS认证中中添加认证条目,点击“添加”,然后依次填写别名(demo),用户标识(db2admin),和密码(123456),描述可以不填写。
然后选择“数据源”标签,在JDBC提供程序列表中选择“Default DB2 JDBC Provider”,然后在“在上面选择的JDBC提供的程序中定义的数据源”部分点击“添加”,将弹出“创建数据源”的对话框,选择“DB2 JDBC Provider”和“V5.0 数据源”点击“下一步”。
在这个页面中,名称栏填写“demo”,JNDI名称填写“jdbc/demo”,组件管理认证别名,和容器管理认证别名下拉选择“demo”,不用选择“在容器管理的持久性(CMP)使用该认证名”,其他的使用默认值。选择下一步。
在“资源属性”列表中,选择database name,值填写“demo”;选择“portNumber”,值填写“50000”(这是访问DB2实例的缺省端口)。点击完成。
最后保存设置页。
打开“web”透视图,编辑\webContent\WEB-INF\web.xml(注意打开方式是“部署描述符编辑器”,这样编辑比源文件方式方便)。点击“资源”标签,然后点击“添加”,引用资源的名称改为“jdbc/demo”,类型改为“java.sql.DataSource”。
保存推出。
4.装载hibernate和hibernate eclipse plugin类库
从sourceforge.net上可获取,以上两者的zip文件,我所使用的是hibernate2.1beat6和eclipse plugin 0.9.6。
将hibernate-2.1beta6.zip解压到tmp目录,将hibernate2.jar和tmp\hibernate-2.1\lib下所有的的jar文件复制到workspace_demo\demoWeb\WebContent\WEB-INF下。(或许不需要所有的,但这样省事嘛)
将hibernator-0.9.6.zip解压到WSAD安装目录下的eclipse\plugin目录下。注意,如要此插件支持最新版本的hibernate,需要将hibernate\lib下同名的jar文件和hibernate2.jar的最新版本替代wasd51\eclipse\plugins\hibernator_0.9.6\lib下的jar文件和hibernate2.jar文件。
5.编写hibernate.cfg.xml文件
hibernate可以识别xml和properies文件,据说Hibernate往后的版本将改成使用xml,因此我选择使用xml来配置hibernate。
选择web透视图,在JavaSource目录下,创建hibernate.cfg.xml。创建方法是,右键点击“JavaSource”->“新建”->“其他”->“xml”,依照向导建立一个空的文件名为hibernate.cfg.xml的文件。然后以源码形式打开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/demo</property>
<property name="show_sql">false</property>
<property name="use_outer_join">true</property>
<property name="dialect">net.sf.hibernate.dialect.DB2Dialect</property>
<!-- Mapping files -->
<mapping resource="com/jaq/po/Demo.hbm.xml"/>
</session-factory>
</hibernate-configuration>
此时,你会看到保存出错,其实这个错误并不影响demo程序的正常运行,但是WSAD在保存之前检查dtd文件的存放位置,由于无法从本地获取,于是它尝试从http://hibernate.sourceforge.net/hibernate-configuration-2.0.dtd来的到,这便是你看到的operation time out错误的原因。为了去掉讨厌的红叉,可以这样做,首先将hibernate2.jar解开,从中找到hibernate-configuration-2.0.dtd和hibernate-mapping-2.0.dtd,将他们复制到一个目录下,暂定为c:\tmp。打开“窗口”菜单,选择“首选项”,在“首选项”对话框中选择“XML”->“XML目录”。点击“新建”,在“URL”input框中填写:“file:C:\tmp\hibernate-configuration-2.0.dtd”,键类型选择“公用标识”,在“键”的input框中填写“-//Hibernate/Hibernate Configuration DTD//EN”,同样的方法再添加另一个dtd的XML目录条目,URL和键分别用“file:C:\tmp\hibernate-mapping-2.0.dtd”和“-//Hibernate/Hibernate Mapping DTD//EN”。再保存一次,这下红叉叉就不见了。
6.编写Demo.java和Demo.hbm.xml。
首先建一个包为com.jaq.po,然后再在这个包下面建一个Demo的类。方法都是,右键点击“JavaSource”,然后选择“新建包”和“新建类”,并根据它的向导来创建,在这里不再赘述。现在打开Demo.java文件,添加两个field:private int id,private String name;然后在源文件处右键,选择“源”->“生成setter和getter”,让工具自动帮你生成setter和getter方法。(字段多的时候,这项功能简直帅呆了)。然后通过hibernate插件来帮你生成映射文件,首先打开“窗口”->“显示试图”->“其他”,然后你应该可以看见hibernate的选项(注意,插件安装后要重新启动WSAD,插件解压的目录不对会导致插件无法显示在这个视图中)。选择“Hibernate”->“Hibernate”,点击确定之后,你将看到自动产生的Demo.hbm.xml文件,这个自动产生的工具据说在映射复杂的情况下,表现不佳,需要较多的手工修改。保留一下部分:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
<hibernate-mapping>
<class name="com.jaq.po.Demo" table="demo">
<id name="id">
<generator class="assigned">
</generator>
</id>
<property name="name"/>
</class>
</hibernate-mapping>
<!-- parsed in 0ms -->
然后保存此映射文件(此文件自动保存在与Demo.java同目录下,程序运行时将会有一份拷贝在Demo.class同目录下)。
7.编写测试页面
右键点击“WebContent”->“新建JSP”,然后,将下面的代码复制到新建的JSP页面中。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML>
<HEAD>
<%@ page
language="java"
contentType="text/html; charset=GB18030"
pageEncoding="GB18030"
%>
<%@ page import= "java.sql.* "%>
<%@ page import= "com.jaq.po.* "%>
<%@ page import= "net.sf.hibernate.* "%>
<%@ page import= "net.sf.hibernate.cfg.* "%>
<META http-equiv="Content-Type" content="text/html; charset=GB18030">
<META name="GENERATOR" content="IBM WebSphere Studio">
<TITLE>demoDBCP.jsp</TITLE>
</HEAD>
<BODY>
<%
SessionFactory sf = new Configuration().configure().buildSessionFactory();
Session sess = sf.openSession();
Transaction tx = null;
try {
tx = sess.beginTransaction();
Demo demo = new Demo();
demo.setId(1);
demo.setName("roberto");
sess.save(demo);
tx.commit();
}
catch (Exception e) {
if (tx!=null) tx.rollback();
throw e;
}
finally {
sess.close();
}
%>
</BODY>
</HTML>
如果找不到类的路径,可以在“项目”->“属性”中的java构建路径,中添加新的jar包,或者文件夹,我把hibernate2.jar加入到了此项目的java构建路径当中。当然也可以通过别的途径让编译器找到你需要引用的类。
7.运行
右键点击Demo.jsp文件,选择“在服务器上运行”。如果运气够好,运行完之后,你就可以从数据库的demo表中查看到你刚插入的那条记录。