本文是开发基于spring的web应用的入门文章前端采用Struts MVC框架中间层采用spring后台采用Hibernate
本文包含以下内容
·配置Hibernate和事务
·装载Spring的applicationContextxml文件
·建立业务层和DAO之间的依赖关系
·将Spring应用到Struts中
简介
这个例子是建立一个简单的web应用叫MyUsers完成用户管理操作包含简单的数据库增删查该即CRUD(新建访问更新删除)操作这是一个三层的web应用通过Action(Struts)访问业务层业务层访问DAO图一简要说明了该应用的总体结构图上的数字说明了流程顺序-从web(UserAction)到中间层(UserManager)再到数据访问层(UserDAO)然后将结果返回
Spring层的真正强大在于它的声明型事务处理帮定和对持久层支持(例如Hiberate和iBATIS)
以下下是完成这个例子的步骤
. 安装Eclipse插件
. 数据库建表
. 配置Hibernate和Spring
. 建立Hibernate DAO接口的实现类
. 运行测试类测试DAO的CRUD操作
. 创建一个处理类声明事务
. 创建web层的Action和model
. 运行Action的测试类测试CRUD操作
. 创建jsp文件通过浏览器进行CRUD操作
. 通过浏览器校验jsp
安装eclipse插件
. Hibernate插件
. Spring插件ide/eclipse/updatesite/
. MyEclipse插件(破解版)
. Tomcat插件 tanghan
. 其他插件包括xmljsp
数据库建表
create table app_user(id number not null primaryfirstname vchar()lastname vchar());
新建项目
新建一个web project新建后的目录结构同时包含了新建文件夹page用于放jsp文件和源文件夹test用于放junit测试文件同时将用到的包包括strutshibernatespring都导入到lib目录下
创建持久层O/R mapping
. 在src/comjandarmodel下用hibernate插件从数据库导出app_user的hbmxml文件改名为Userhbmxml
<?xml version=?>
<!DOCTYPE hibernatemapping PUBLIC
//Hibernate/Hibernate Mapping DTD//EN
mappingdtd >
<hibernatemapping package=comjandarmodel>
<class name=User table=APP_USER>
<id
column=ID
name=id
type=integer
>
<generator class=assigned />
</id>
<property
column=LASTNAME
length=
name=lastname
notnull=false
type=string
/>
<property
column=FIRSTNAME
length=
name=firstname
notnull=true
type=string
/>
</class>
</hibernatemapping>
. 通过hibernate synchronizer>synchronizer file生成Userjava文件User对象对应于数据库中的app_user表
注在eclipse下自动生成的对象文件不完全相同相同的是每个对象文件必须实现Serializable接口必需又toString和hashCode方法
import javaioSerializable;
import monslangbuilderEqualsBuilder;
import monslangbuilderHashCodeBuilder;
import monslangbuilderToStringBuilder;
import monslangbuilderToStringStyle;
public class BaseObject implements Serializable {
public String toString() {
return ToStringBuilderreflectionToString(this
ToStringStyleMULTI_LINE_STYLE);
}
public boolean equals(Object o) {
return EqualsBuilderreflectionEquals(this o);
}
public int hashCode() {
return HashCodeBuilderreflectionHashCode(this);
}
}
public class User extends BaseObject {
private Long id;
private String firstName;
private String lastName;
/**
* @return Returns the id
*/
public Long getId() {
return id;
}
/**
* @param id The id to set
*/
public void setId(Long id) {
thisid = id;
}
/**
* @return Returns the firstName
*/
public String getFirstName() {
return firstName;
}
/**
* @param firstName The firstName to set
*/
public void setFirstName(String firstName) {
thisfirstName = firstName;
}
/**
* @return Returns the lastName
*/
public String getLastName() {
return lastName;
}
/**
* @param lastName The lastName to set
*/
public void setLastName(String lastName) {
thislastName = lastName;
}
}
创建DAO访问对象
. 在src/comjandarservicedao新建IDAOjava接口所有的DAO都继承该接口
package comjandarservicesdao;
public interface IDAO
. 在src/comjandarservicedao下新建IUserDAOjava接口
public interface IUserDAO extends DAO {
List getUsers();
User getUser(Integer userid);
void saveUser(User user);
void removeUser(Integer id);
}
该接口提供了访问对象的方法
. 在src/comjandarservicedaohibernate下新建UserDAOHiberantejava
import javautilList;
import monsloggingLog;
import monsloggingLogFactory;
import orgspringframeworkormhibernatesupportHibernateDaoSupport;
import comjandarmodelUser;
import comjandarservicedaoIUserDAO;
public class UserDaoHibernate extends HibernateDaoSupport implements IUserDAO {
private Log log=LogFactorygetLog(UserDaoHibernateclass);
/* (非 Javadoc)
* @see comjandardaoIUserDAO#getUsers()
*/
public List getUsers() {
return getHibernateTemplate()find(from User);
}
/* (非 Javadoc)
* @see comjandardaoIUserDAO#getUser(javalangLong)
*/
public User getUser(Integer id) {
// TODO 自动生成方法存根
return (User) getHibernateTemplate()get(Userclassid);
}
/* (非 Javadoc)
* @see comjandardaoIUserDAO#saveUser(comjandarmodelUser)
*/
public void saveUser(User user) {
logdebug(xxxxxxx);
Systemoutprintln(yyyy);
getHibernateTemplate()saveOrUpdate(user);
if(logisDebugEnabled())
{
logdebug(userId set to +usergetId());
}
}
/* (非 Javadoc)
* @see comjandardaoIUserDAO#removeUser(javalangLong)
*/
public void removeUser(Integer id) {
Object user=getHibernateTemplate()load(Userclassid);
getHibernateTemplate()delete(user);
if(logisDebugEnabled()){
logdebug(del user +id);
}
}
}
在这个类中实现了IUserDAO接口的方法并且继承了HibernateDAOSupport类这个类的作用是通过hibernate访问操作对象进而实现对数据库的操作