持久层(The Persistence Layer)
持久层是我们典型的Web应用的另一个末端。现在已经有很多很好的ORM开源框架来解决持久层的各种问题,尤其是Hibernate。 Hibernate为Java提供了OR持久化机制和查询服务, 它还给已经熟悉SQL和JDBC API 的Java开发者一个学习桥梁,他们学习起来很方便。 Hibernate的持久对象是基于POJO和Java collections。
前期准备工作
1. 打开WSAD,点击 文件-新建-其他,在弹出的对话框左边选择Portlet开发,右边选择Portlet项目。如图1:
图1

2. 点下一步,在项目名中输入Sample,类型选择Struts Portlet,如果没有需要配置的高级选项,点击完成。这样,就创建了一个设置为使用 WebSphere Portal Server 所包括的 Struts Portlet Framework 的 Portlet。如图2:
图2

3. 建立目录结构。在刚建的Sample项目上点右键,选择属性-JAVA构建路径-源,选中Sample/JavaSource,选中'除去',将这个目录从构建路径中清除。点击'添加文件夹',在JavaSource下创建目录:dao,service,web,并将这三个目录添加到构建路径中。在下面的步骤中,我们将在dao目录下放置和持久层相关的代码,在service目录下放置业务层相关的代码,在web目录下放置struts相关的action,form代码。在Sample目录下建立Test目录,Test目录下建立dao,service目录。我们将在Test/dao下放置dao层的JUnit测试代码,在Test/service下放置service层的JUnit测试代码。如图3:
图3

4. 配置环境变量将附件中lib目录下的文件,全部拷贝到Sample项目的对象lib目录下,并在构建路径中完成类路径设置。
5. 配置数据库。在附件中,你可以找到两个文件,分别名为build.xml和build.properties,将其拷贝到Sample应用的根目录下。修改build.properties文件中关于数据库的设置,包括数据库用户名,数据库密码,数据库名,数据库驱动类名,连接数据库的URL,以及Hibernate需要使用的数据库Dialect类名。将其设置为你的测试环境数据库一致即可。默认的数据库设置为MySql。


创建域模型层
这层是编码的着手点,我们的编码就从这层开始。 本应用中的Domain Object比较简单,只使用了一个对象:com.ibm.sample.bo.InfoObject.java。
代码清单 :
package com.ibm.sample.bo;
public class InfoObject {
private Long infoId;
private String title;
private String content;
}
infoId记录了这个InfoObject对象的唯一标识,title记录了新闻标题,content记录了新闻内容。
创建持久层
1. 持久化BO。 Hibernate是通过POJO工作的, 因此我们先给InfoObject对象的fileds 加上getter,setter方法。Hibernate通过XML文件来映射(OR)对象,在这里,我们使用XDoclet工具来生成hibernate的XML映射文件。为了使用Xdoclet这个工具,我们需要在BO对象的代码里面添加一些描述语句。修改后的BO对象代码如下:
代码清单2:
package com.ibm.sample.bo;
/**
* @author rayguo mail:guorui@cn.ibm.com
*
* @hibernate.class table="InfoObject"
*
*/
public class InfoObject {
private Long infoId;
private String title;
private String content;
/**
* Returns the Content.
* @return String
*
* @hibernate.property
* @hibernate.column name="Content" not-null="false"
* length="3000"
*/
public String getContent() {
return content;
}
/**
* Returns the id.
* @return Long
*
* @hibernate.id column="infoId"
* generator-class="native"
*/
public Long getInfoId() {
return infoId;
}
/**
* Returns the Title.
* @return String
*
* @hibernate.property
* @hibernate.column name="title" not-null="true"
* length="200"
*/
public String getTitle() {
return title;
}
public void setContent(String string) {
content = string;
}
public void setInfoId(Long long1) {
infoId = long1;
}
public void setTitle(String string) {
title = string;
}
}
[8] [9]
