基于Struts2+Spring2+Hibernate3的CRUD(附源代码)

闲来无事做了一个关于struts2+spring2+hibernate3的整合示例。
废话少说,先看代码!
首先是web.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="person" version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>person</display-name>
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.FilterDispatcher
</filter-class>
<init-param>
<param-name>classes</param-name>
<param-value>java.lang.Object</param-value>
</init-param>
</filter>

<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>

<!-- 如果要整合spring的话,请添加该监听器 -->
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
</web-app>

然后是struts.xml文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.i18n.encoding" value="UTF-8"/>
<!-- 一定要加,对象工厂是spring -->
<constant name="struts.objectFactory" value="spring" />
<!-- 开启开发模式 -->
<constant name="struts.devMode" value="true" />

<package name="login" extends="struts-default">
<!-- 保存 -->
<action name="Login" method="save" class="LoginAction">
<result type="redirect-action">list</result>
<!-- <result name="error">error.jsp</result> -->
</action>
<!-- 显示出所有列表 -->
<action name="list" method="list" class="LoginAction">
<result>success.jsp</result>
</action>
<!-- 删除 -->
<action name="delete" method="delete" class="LoginAction">
<result type="redirect-action">list</result>
</action>
<!-- 更新 -->
<action name="update" method="update" class="LoginAction">
<result>index.jsp</result>
</action>
</package>

</struts>

由以上配置信息可以看到,我们是将所有的CRUD操作写在一个Action中的。那这里的class的值为什么没有包路径呢?因为我们用到了spring,当然是交给spring容器去管理了。请看spring的配置文件applicationContext.xml。
<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
<!-- 配置数据源 -->
<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName"
value="com.mysql.jdbc.Driver">
</property>
<property name="url" value="jdbc:mysql://127.0.0.1:3306"></property>
<property name="username" value="root"></property>
<property name="password" value="sa"></property>
<property name="initialSize" value="10"></property>
<property name="maxActive" value="50"></property>
<property name="maxIdle" value="30"></property>
<!-- 可以继续配置其他的属性 -->
</bean>
<!-- 配置session工厂 -->
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="dataSource" />
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.MySQLDialect
</prop>
</props>
</property>
<property name="mappingResources">
<list>
<value>org/s2s2h3/po/Person.hbm.xml</value></list>
</property>
</bean>
<!-- 配置具体的数据访问类 -->
<bean id="dao" class="org.s2s2h3.dao.hibernate.PersonHibernateDAO">
<property name="sessionFactory">
<ref bean="sessionFactory"/>
</property>
</bean>
<!-- 配置具体的业务逻辑类 -->
<bean id="personService" class="org.s2s2h3.service.PersonService">
<property name="personHibernateDAO">
<ref bean="dao"/>
</property>
</bean>
<!-- 配置Action -->
<bean id="LoginAction" class="org.s2s2h3.action.LoginAction">
<property name="personService">
<ref bean="personService"/>
</property>
</bean>
</beans>

从该配置文件可以看出,我们的程序分成了几层:DAO层,业务层,还有基于struts2的MVC架构。
具体的Action类。
package org.s2s2h3.action;

import java.util.List;
import javax.servlet.http.HttpServletRequest;
import org.s2s2h3.po.Person;
import org.s2s2h3.service.PersonService;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ActionContext;
//import com.opensymphony.xwork2.Action;
//public class LoginAction implements Action
/**
* CRUD类
*/
public class LoginAction extends ActionSupport
{
private PersonService personService;

//private Person person = new Person();
private Person person ;
private List<Person> persons;
private String id;


public String getId() {
return id;
}

public void setId(String id) {
this.id = id;
}

public List<Person> getPersons() {
return persons;
}

public void setPersons(List<Person> persons) {
this.persons = persons;
}

public LoginAction()
{

}

public Person getPerson() {
return person;
}

public void setPerson(Person person) {
this.person = person;
}

public PersonService getPersonService() {
return personService;
}

public void setPersonService(PersonService personService) {
this.personService = personService;
}

public String execute() throws Exception
{
if(person!=null&& !person.equals(""))
{
personService.saveOrUpdate(person);
}
persons = personService.findAll();
setPersons(persons);

System.out.println(persons.size());
return SUCCESS;
}

public String list() throws Exception
{
persons = personService.findAll();
setPersons(persons);
return SUCCESS;
}

public String save() throws Exception
{
personService.saveOrUpdate(person);
return SUCCESS;
}

public String update() throws Exception
{
person = personService.get(id);
return SUCCESS;
}

public String getValue() throws Exception
{

return SUCCESS;
}

public String delete() throws Exception
{
//System.out.println("id is ==="+id);
person = personService.get(id);
personService.delete(person);
return SUCCESS;
}
}

DAO实现类。继承了HibernateDaoSupport。
package org.s2s2h3.dao.hibernate;

import java.util.List;

import org.s2s2h3.dao.PersonDAO;
import org.s2s2h3.po.Person;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

public class PersonHibernateDAO extends HibernateDaoSupport implements
PersonDAO {

@Override
public void delete(Person person) {
// TODO Auto-generated method stub
this.getHibernateTemplate().delete(person);
}

@Override
public List<Person> findAll() {
// TODO Auto-generated method stub
List<Person> persons = this.getHibernateTemplate().find("from Person");
return persons;
}

@Override
public Person get(String id) {
// TODO Auto-generated method stub
Person person = (Person)this.getHibernateTemplate().get(Person.class, id);
return person;
}

@Override
public void saveOrUpdate(Person person) {
// TODO Auto-generated method stub
this.getHibernateTemplate().saveOrUpdate(person);
}

@Override
public void update(Person person) {
// TODO Auto-generated method stub
this.getHibernateTemplate().saveOrUpdate(person);
}

}

PO类 及其 映射文件。
package org.s2s2h3.po;
/**
* Person entity.
*
* @author MyGod
*/
public class Person implements java.io.Serializable {

// Fields
private String id;
private String name;
private String age;
private String sex;
private String address;

// Constructors
/** default constructor */
public Person() {
}

/** minimal constructor */
public Person(String name) {
this.name = name;
}

/** full constructor */
public Person(String name, String age, String sex, String address) {
this.name = name;
this.age = age;
this.sex = sex;
this.address = address;
}

// Property accessors

public String getId() {
return this.id;
}

public void setId(String id) {
this.id = id;
}

public String getName() {
return this.name;
}

public void setName(String name) {
this.name = name;
}

public String getAge() {
return this.age;
}

public void setAge(String age) {
this.age = age;
}

public String getSex() {
return this.sex;
}

public void setSex(String sex) {
this.sex = sex;
}

public String getAddress() {
return this.address;
}

public void setAddress(String address) {
this.address = address;
}

}

hbm文件。
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
<class name="org.s2s2h3.po.Person" table="person" catalog="ssh2">
<id name="id" type="java.lang.String">
<column name="id" length="10" />
<generator class="assigned" />
</id>
<property name="name" type="java.lang.String">
<column name="name" length="30" not-null="true" />
</property>
<property name="age" type="java.lang.String">
<column name="age" length="10" />
</property>
<property name="sex" type="java.lang.String">
<column name="sex" length="10" />
</property>
<property name="address" type="java.lang.String">
<column name="address" length="50" />
</property>
</class>
</hibernate-mapping>

业务逻辑类及其实现。
package org.s2s2h3.service;

import java.util.List;

import org.s2s2h3.dao.hibernate.PersonHibernateDAO;
import org.s2s2h3.po.Person;
/**
*
* @author MyGod
* @version 1.0
*/
public class PersonService {

private PersonHibernateDAO personHibernateDAO;

public void setPersonHibernateDAO(PersonHibernateDAO personHibernateDAO) {
this.personHibernateDAO = personHibernateDAO;
}

public void saveOrUpdate(Person person)
{
personHibernateDAO.saveOrUpdate(person);
}

public void update(Person person)
{
personHibernateDAO.update(person);
}

public void delete(Person person)
{
personHibernateDAO.delete(person);
}

public List<Person> findAll()
{
return personHibernateDAO.findAll();
}

public Person get(String id)
{
return personHibernateDAO.get(id);
}

}

数据库初始化文件
create database ssh2;

use ssh2;

create table person
(
id varchar(10) primary key,
name varchar(30) not null,
age varchar(10),
sex varchar(10),
address varchar(50)
);

首页及成功页。
index.jsp。
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>客户管理</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>

<body>
<s:if test="null == person">
Add Customer
</s:if>
<s:else>
Update Customer
</s:else>
<s:form action="Login" method="post">
<table>
<caption>客户管理</caption>
<tr>
<td><s:textfield name="person.id" label="ID"/></td>
</tr>
<tr>
<td><s:textfield name="person.name" label="Name"/></td>
</tr>
<tr>
<td><s:textfield name="person.age" label="Age"/></td>
</tr>
<tr>
<td><s:textfield name="person.sex" label="Sex"/></td>
</tr>
<tr>
<td><s:textarea name="person.address" label="Address"/></td>
</tr>
<tr>
<td colspan="2"><s:submit value="提交"/><s:reset value="重填"/></td>
</tr>
</table>
</s:form>
</body>
</html>

success.jsp。
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">

<title>客户一览</title>

<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->

</head>

<body>
<table>
<tr>
<td>
ID
</td>
<td>
Name
</td>
<td>
Age
</td>
<td>
Sex
</td>
<td>
Address
</td>
<td>
Update
</td>
<td>
Delete
</td>
</tr>
<s:iterator value="persons">
<tr>
<td>
<s:property value="id" />
</td>
<td>
<s:property value="name" />
</td>
<td>
<s:property value="age" />
</td>
<td>
<s:property value="sex" />
</td>
<td>
<s:property value="address" />
</td>


<td>
<a
href='<s:url action="update"><s:param name="id" value="id" /></s:url>'>Update</a>
</td>
<!-- <s:url id="linkTest" action="delete" ><s:param name="id" value="id" /></s:url> -->
<s:url id="linkTest" action="delete">
<s:param name="id" value="id" />
</s:url>
<td>
<s:a href="%{linkTest}">Delete</s:a>
</td>
</tr>
</s:iterator>
</table>
<hr>
<a href="index.jsp">Add</a>
</body>
</html>

好了,这下差不多全了,至于那些包用什么,自己去找吧。呵呵。希望对您有点帮助。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值