spring(5):spring,struts2和hibernate结合
本节主要通过一个小例子来讲解spring,struts,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>?