读书人

spring(五):spring,struts2和hiberna

发布时间: 2012-10-13 11:38:17 作者: rapoo

spring(5):spring,struts2和hibernate结合

本节主要通过一个小例子来讲解spring,struts,hibernate的结合:

?

例:增删改查用户:

操作列表:保存用户或显示所有用户,如下图

?spring(五):spring,struts2和hibernate结合

新增用户界面

?

spring(五):spring,struts2和hibernate结合

显示所有用户列表

spring(五):spring,struts2和hibernate结合

修改用户:

spring(五):spring,struts2和hibernate结合

?

?

以下是代码实现,此工程所需的JAR包及配置与前几节一样

User对应的bean,user有id,age,firstname,lastname四个属性:

package com.test.bean;public class User {private int id;private int age;private String firstname;private String lastname;public int getId() {return id;}public void setId(int id) {this.id = id;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getFirstname() {return firstname;}public void setFirstname(String firstname) {this.firstname = firstname;}public String getLastname() {return lastname;}public void setLastname(String lastname) {this.lastname = lastname;}}

?

User对应的hibernate配置文件

User.hbm.xml

<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"      "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping><class name="com.test.bean.User" table="users"><id name="id" column="id" type="int"><generator column="firstname" type="java.lang.String"></property><property name="lastname" column="lastname" type="java.lang.String"></property><property name="age" column="age" type="int"></property></class></hibernate-mapping>

?

其对应的dao接口

UserDAO.java

package com.test.dao;import java.util.List;import com.test.bean.User;public interface UserDAO {public void saveUser(User user);public List<User> findAllUsers();public void removeUser(User user);public void updateUser(User user);public User findUserById(Integer id);}

?

?

实现类UserDAOImpl.java

?

package com.test.dao.impl;import java.util.List;import org.springframework.orm.hibernate3.support.HibernateDaoSupport;import com.test.bean.User;import com.test.dao.UserDAO;public class UserDAOImpl extends HibernateDaoSupport implements UserDAO{public void saveUser(User user) {this.getHibernateTemplate().save(user);}public List<User> findAllUsers() {String hql = " from User user order by user.id desc";return (List<User>)this.getHibernateTemplate().find(hql);}public void removeUser(User user) {this.getHibernateTemplate().delete(user);}public User findUserById(Integer id) {User user = (User) this.getHibernateTemplate().get(User.class, id);return user;}public void updateUser(User user) {this.getHibernateTemplate().update(user);}}

?

UserService.java接口

package com.test.service;import java.util.List;import com.test.bean.User;public interface UserService {public void save(User user);public List<User> findAll();public void delete(User user);public void update(User user);public User findById(Integer id);}

?

实现类,通过调用 DAO层代码,分别实现用户的新增,删除,更新,查找操作

package com.test.service.impl;import java.util.List;import com.test.bean.User;import com.test.dao.UserDAO;import com.test.service.UserService;public class UserServiceImpl implements UserService {private UserDAO userDao;public UserDAO getUserDao() {return userDao;}public void setUserDao(UserDAO userDao) {this.userDao = userDao;}public void save(User user) {this.userDao.saveUser(user);}public List<User> findAll() {return this.userDao.findAllUsers();}public void delete(User user) {this.userDao.removeUser(user);}public void update(User user) {this.userDao.updateUser(user);}public User findById(Integer id) {return this.userDao.findUserById(id);}}

?

以下是Action类,一共五个:action类中不处理业务逻辑,业务逻辑都放在service类中处理,action主要处理转发。其中UpdatePUserAction用于查找需要被修改的数据。并将其值返回到update.jsp页面

?

ListUserAction.java ,查找所有用户,其值返回到list.jsp

package com.test.action.user;import java.util.Map;import com.opensymphony.xwork2.ActionContext;import com.opensymphony.xwork2.ActionSupport;import com.test.service.UserService;public class ListUserAction extends ActionSupport {private UserService userService;public UserService getUserService() {return userService;}public void setUserService(UserService userService) {this.userService = userService;}public String execute() throws Exception {Map request = (Map) ActionContext.getContext().get("request");request.put("list", this.userService.findAll());return "success";}}

?

删除用户

package com.test.action.user;import com.opensymphony.xwork2.ActionSupport;import com.test.bean.User;import com.test.service.UserService;public class RemoveUserAction extends ActionSupport {private User user;private UserService userService;public User getUser() {return user;}public void setUser(User user) {this.user = user;}public UserService getUserService() {return userService;}public void setUserService(UserService userService) {this.userService = userService;}public String execute() throws Exception {this.userService.delete(user);return "success";}}

?

保存

package com.test.action.user;import com.opensymphony.xwork2.ActionSupport;import com.test.bean.User;import com.test.service.UserService;public class SaveUserAction extends ActionSupport {private User user;private UserService userService;public User getUser() {return user;}public void setUser(User user) {this.user = user;}public UserService getUserService() {return userService;}public void setUserService(UserService userService) {this.userService = userService;}public String execute() throws Exception {// 调用 service相关方法,完成实际的业务处理this.getUserService().save(user);return "success";}}

?

根据传入的ID值返回需要被更新的user信息

package com.test.action.user;import com.opensymphony.xwork2.ActionSupport;import com.test.bean.User;import com.test.service.UserService;public class UpdatePUserAction extends ActionSupport {private User user;private UserService userService;public User getUser() {return user;}public void setUser(User user) {this.user = user;}public UserService getUserService() {return userService;}public void setUserService(UserService userService) {this.userService = userService;}public String execute() throws Exception {this.user = userService.findById(user.getId());return "success";}}

?

更新

package com.test.action.user;import com.opensymphony.xwork2.ActionSupport;import com.test.bean.User;import com.test.service.UserService;public class UpdateUserAction extends ActionSupport {private User user;private UserService userService;public User getUser() {return user;}public void setUser(User user) {this.user = user;}public UserService getUserService() {return userService;}public void setUserService(UserService userService) {this.userService = userService;}public String execute() throws Exception {this.userService.update(user);return super.execute();}}

?

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><package name="ssh2" extends="struts-default"><!--下面这个class的值对应的是spring配置文件中的saveUserAction bean--><action name="saveUser" type="redirect">listUser.action</result></action><action name="listUser" type="redirect">listUser.action</result></action><action name="updatePUser"  type="redirect">listUser.action</result></action></package></struts>

?

spring配置文件,所有的bean之前的依赖关系都写在里面

<?xml version="1.0" encoding="UTF-8"?><beansxmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:p="http://www.springframework.org/schema/p"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"><!-- 配置连接池数据源,destroy-method="close"表示退出时,将所有连接释放 --><bean id="dataSource" destroy-method="close"><property name="driverClassName"><value>com.mysql.jdbc.Driver</value></property><property name="url"><value>jdbc:mysql://localhost:3306/hibernate</value></property><property name="username"><value>root</value></property><property name="password"><value>123456</value></property></bean><!-- session 工厂 --><bean id="sessionFactory" scope="singleton"><property name="sessionFactory"><ref local="sessionFactory"/></property></bean><bean id="saveUserAction" scope="prototype"><property name="userService"><ref local="userService"/></property></bean><bean id="listUserAction" scope="prototype"><property name="userService"><ref local="userService"/></property></bean><bean id="removeUserAction" scope="prototype"><property name="userService"><ref local="userService"/></property></bean><bean id="updatePUserAction" scope="prototype"><property name="userService"><ref local="userService"/></property></bean><bean id="updateUserAction" scope="prototype"><property name="userService"><ref local="userService"/></property></bean></beans>

?

hibernate配置文件,基本无配置

hibernate.cfg.xml

<?xml version='1.0' encoding='UTF-8'?><!DOCTYPE hibernate-configuration PUBLIC          "-//Hibernate/Hibernate Configuration DTD 3.0//EN"          "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"><!-- Generated by MyEclipse Hibernate Tools.                   --><hibernate-configuration>    <session-factory>    </session-factory></hibernate-configuration>

?

以下是JSP页面

index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%><%@ taglib prefix="s" uri="/struts-tags"%><html>  <head>  </head>  <body>    <h1><font color="red">operation list</font></h1>    <s:a href ="save.jsp">save user</s:a><br><br><br>    <s:a href="listUser.action">List Users</s:a>  </body></html>

?

显示所有用户界面

<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%><%@ taglib prefix="s" uri="/struts-tags"%><html>  <head>  <SCRIPT type="text/javascript">  function del(){  if(confirm("are you sure?")){  return true;  }  return false;  }  </SCRIPT>  </head>  <body>    <h1><font color="red">list user</font></h1>    <table border="1" width="80% align="center">    <tr>    <td>    序号    </td>    <td>    姓    </td>    <td>    名    </td>    <td>    年龄    </td>    <td>    删除    </td>    <td>    更新    </td>    </tr>    <s:iterator value="#request.list" id="us">    <tr>    <td>    <s:property value="#us.id"/>    </td>    <td>    <s:property value="#us.firstname"/>    </td>    <td>    <s:property value="#us.lastname"/>    </td>    <td>    <s:property value="#us.age"/>    </td>    <td>    <!-- 通过updatePUser.action从数据库中取出此ID对应的数据,并传到update.jsp上 -->    <s:a href="updatePUser.action?user.id=%{#us.id}">update</s:a>    </td>    <td>    <s:a href="deleteUser.action?user.id=%{#us.id}" onclick="return del();"> delete</s:a>    </td>    </tr>    </s:iterator>    </table>  </body></html>

?

保存页面

<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%><%@ taglib prefix="s" uri="/struts-tags"%><html>  <head>  </head>  <body>    <h1><font color="red">save user</font></h1>    <s:form action="saveUser">    <s:textfield name="user.firstname" label="first name"></s:textfield>    <s:textfield name="user.lastname" label="last name"></s:textfield>    <s:textfield name="user.age" label="age"></s:textfield>    <s:submit value="submit"></s:submit>    </s:form>  </body></html>

?

更新页面

<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%><%@ taglib prefix="s" uri="/struts-tags"%><html>  <head>  </head>  <body>    <h1><font color="red">update user</font></h1>    <s:form action="updateUser">    <table>    <tr>    <td>    <s:hidden name="user.id" value="%{user.id}"></s:hidden>    </td>    </tr>    <tr>    <td>    <s:textfield name="user.firstname" value="%{user.firstname}" label="firstname"></s:textfield>    </td>    </tr>    <tr>    <td>    <s:textfield name="user.lastname" value="%{user.lastname}" label="lastname"></s:textfield>    </td>    </tr>    <tr>    <td>    <s:textfield name="user.age" value="%{user.age}" label="age"></s:textfield>    </td>    </tr>    <tr>    <td>    <s:submit value="submit"></s:submit>    </td>    </tr>    </table>    </s:form>  </body></html>

?

读书人网 >编程

热点推荐