软件和框架版本:
MyEclipse 8.5
Tomcat 6.0.36
Sturts2 .1
Hibernate 3.2
Spring 2.0
Mysql 5.62
(一)引入包 (注意包冲突)
通过MyEclipse直接导入
(二)创建数据库表
建立数据库octtest,并创建user表,表里面一共4个字段:id,姓,名,年龄。
语句如下:
create database octtest;
user octtest;
DROP TABLE IF EXISTS `users`;
CREATE TABLE `users` (
`id` int(10) unsigned NOT NULL,
`firstname` varchar(50) NOT NULL,
`lastname` varchar(50) NOT NULL,
`age` int(10) unsigned NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
(三)用myeclipse 中自带的hibernate reverse engineering 工具,根据刚才创建的user表, 自动生成实体User 和相应的User.hbm.xml配置文件。
1)在myeclipse中的<DB Browser>视图中创建连接数据库连接,如下图:
SSH2 增删查改实例(原创) - Owen -
填入mysql数据库相应的路径,用户名,密码等信息。注意:这里要引入mysql-connector-java的jar包,需要从外部导入。
2)连接数据库正常后,选择octtest数据库中的user表,右键-》hibernate reverse engineering。自动生成实体User 和相应的User.hbm.xml配置文件。(正常情况下可以生成,但是笔者生成engineer有问题,所以只能够手动创建User类和相应的User.hbm.xml,,所以如果读者顺利创建,可跳过2a,2b两部)
2a)创建User实体类
User.java
package com.bean;
public class User {
public Integer id;
public String firstname;
public String lastname;
public int age;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
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;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
2b)创建User实体类对应的映射文件,这个映射文件作用是告诉hibernate要把这个User对象和数据库中的user表联系起来。
User.hbm.xml:
<?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">
<hibernate-mapping>
<class name="com.bean.User" table="users">
<id name="id" type="java.lang.Integer" column="id">
<generator class="increment"/>
</id>
<property name="firstname" type="string" column="firstname"/>
<property name="lastname" type="string" column="lastname"/>
<property name="age" type="java.lang.Integer" column="age"/>
</class>
</hibernate-mapping>
(三)编写底层dao操作:对User实体操作,主要还是 增删查改4个。养成好习惯,无论是dao操作还是业务逻辑,最好都先用接口写好要用到的方法,再用实现类去实现。
dao接口:
package com.dao;
import java.util.List;
import com.bean.User;
public interface UserDAO {
public void saveUser(User user);
public void removeUser(User user);
public User findUserById(Integer id);
public List<User> findAllUser();
public void updateUser(User user);
}
dao实现:
package com.dao.impl;
import java.util.List;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import com.bean.User;
import com.dao.UserDAO;
public class UserDAOImpl extends HibernateDaoSupport implements UserDAO {
@SuppressWarnings("unchecked")
public List<User> findAllUser() {
String hql = "from User user order by user.id desc";
return (List<User>) this.getHibernateTemplate().find(hql);
}
public User findUserById(Integer id) {
User user = (User)this.getHibernateTemplate().get(User.class,id);
return user;
}
public void removeUser(User user) {
this.getHibernateTemplate().delete(user);
}
public void saveUser(User user) {
this.getHibernateTemplate().save(user);
}
public void updateUser(User user) {
this.getHibernateTemplate().update(user);
}
}
(四)编写struts.xml applicationContext.xml web.xml配置文件。其中,web.xml文件是可以一次写完。struts.xml和 applicationContext.xml 需要注意保存路径。
web.xml:(保存路径是:×××项目名/WebRoot/WEB-INF)
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.FilterDispatcher
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
————————————————————————————————————————
applicationContext.xml :(保存路径是:×××项目名/WebRoot/WEB-INF),这个是默认路径
<?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" destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql://localhost:3306/octtest"></property>
<property name="username" value="root"></property>
<property name="password" value="mysql"></property>
<property name="maxActive" value="100"></property>
<property name="maxIdle" value="30"></property>
<property name="maxWait" value="500"></property>
</bean>
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
<property name="mappingResources">
<list>
<value>com/bean/User.hbm.xml</value>
<!--
<value>com/gzjs/updatewapi/entity/As_Active_CertBean.hbm.xml</value>
<value>com/gzjs/updatewapi/entity/Cert_DataBean.hbm.xml</value>
<value>com/gzjs/updatewapi/entity/Revoke_CertBean.hbm.xml</value>
<value>com/gzjs/updatewapi/entity/User.hbm.xml</value>
-->
</list>
</property>
</bean>
<bean id="userDao" class="com.dao.impl.UserDAOImpl" scope="singleton">
<property name="sessionFactory">
<ref bean="sessionFactory"/>
</property>
</bean>
<bean id="userService" class="com.service.impl.UserServiceImpl">
<property name="userDao">
<ref bean="userDao"/>
</property>
</bean>
<bean id="saveUserAction" class="com.action.SaveUserAction" scope="prototype">
<property name="userService">
<ref bean="userService"/>
</property>
</bean>
<bean id="listUserAction" class="com.action.ListUserAction" scope="prototype">
<property name="userService">
<ref bean="userService"/>
</property>
</bean>
<bean id="showUserRecordAction" class="com.action.ShowUserRecordAction" scope="prototype">
<property name="userService">
<ref bean="userService"/>
</property>
</bean>
<bean id="updateUserAction" class="com.action.UpdateUserAction" scope="prototype">
<property name="userService">
<ref bean="userService"/>
</property>
</bean>
<bean id="deleteUserAction" class="com.action.DeleteUserAction" scope="prototype">
<property name="userService">
<ref bean="userService"/>
</property>
</bean>
</beans>
————————————————————————————————————————
struts.xml :(保存路径是:×××项目名/WebRoot/WEB-INF/classes)
<?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="user" extends="struts-default">
<action name="saveUser" class="saveUserAction">
<resultname="success" type="redirect">/listUser.action</result>
<result name="input">/save.jsp</result>
</action>
<action name="listUser" class="listUserAction">
<result name="success">/listUser.jsp</result>
</action>
<action name="showUserRecord" class="showUserRecordAction">
<result name="success">/showRecord.jsp</result>
</action>
<action name="updateUser" class="updateUserAction">
<result name="success" type="redirect">/listUser.action</result>
<result name="input">/showRecord.jsp</result>
</action>
<action name="deleteUser" class="deleteUserAction">
<result name="success" type="redirect">/listUser.action</result>
</action>
</package>
</struts>
(五)编写action类,有两种方法,一种是crud每种操作一个action,另一种是crud集成到一个UserAction中。本文采用第一种。
SaveUserAction:
package com.action;
import com.bean.User;
import com.opensymphony.xwork2.ActionSupport;
import com.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;
}
@Override
public String execute() throws Exception {
this.userService.save(this.user);
return SUCCESS;
}
public UserService getUserService() {
return userService;
}
public void setUserService(UserService userService) {
this.userService = userService;
}
}
ListUserAction:
package com.action;
import java.util.List;
import com.bean.User;
import com.opensymphony.xwork2.ActionSupport;
import com.service.UserService;
public class ListUserAction extends ActionSupport {
private List<User> list;
private UserService userService;
@Override
public String execute() throws Exception {
list = userService.findAllUser();
return SUCCESS;
}
public UserService getUserService() {
return userService;
}
public void setUserService(UserService userService) {
this.userService = userService;
}
public List<User> getList() {
return list;
}
public void setList(List<User> list) {
this.list = list;
}
}
DeleteUserAction:
package com.action;
import com.bean.User;
import com.opensymphony.xwork2.ActionSupport;
import com.service.UserService;
public class DeleteUserAction extends ActionSupport {
private User user;
private UserService userService;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
@Override
public String execute() throws Exception {
this.userService.delete(this.user);
return SUCCESS;
}
public UserService getUserService() {
return userService;
}
public void setUserService(UserService userService) {
this.userService = userService;
}
}
ShowUserRecordAction :
package com.action;
import com.bean.User;
import com.opensymphony.xwork2.ActionSupport;
import com.service.UserService;
public class ShowUserRecordAction extends ActionSupport {
private User user;
private UserService userService;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
@Override
public String execute() throws Exception {
user = this.userService.findById(user.getId());
return SUCCESS;
}
public UserService getUserService() {
return userService;
}
public void setUserService(UserService userService) {
this.userService = userService;
}
}
UpdateUserAction :
package com.action;
import com.bean.User;
import com.opensymphony.xwork2.ActionSupport;
import com.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;
}
@Override
public String execute() throws Exception {
this.userService.update(user);
return SUCCESS;
}
public UserService getUserService() {
return userService;
}
public void setUserService(UserService userService) {
this.userService = userService;
}
}
(七) 编写业务逻辑
service接口:
package com.service;
import java.util.List;
import com.bean.User;
public interface UserService {
public List<User> findAllUser();
public void save(User user);
public void delete(User user);
public void update(User user);
public User findById(Integer id);
}
service实现:
package com.service.impl;
import java.util.List;
import com.bean.User;
import com.dao.UserDAO;
import com.service.UserService;
public class UserServiceImpl implements UserService {
public UserDAO userDao;
public UserDAO getUserDao() {
return userDao;
}
public void setUserDao(UserDAO userDao) {
this.userDao = userDao;
}
public void delete(User user) {
this.userDao.removeUser(user);
}
public List<User> findAllUser() {
return this.userDao.findAllUser();
}
public User findById(Integer id) {
return this.userDao.findUserById(id);
}
public void save(User user) {
this.userDao.saveUser(user);
}
public void update(User user) {
this.userDao.updateUser(user);
}
}
(八)页面:只是基本的展示功能,没有css美化。
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>operation</title>
</head>
<body>
<h1><font color="red">Operation List</font></h1>
<s:a href="http://zy-oct.blog.163.com/blog/save.jsp">Save User</s:a><br><br><br>
<s:a href="http://zy-oct.blog.163.com/blog/listUser.action">List Users</s:a>
</body>
</html>
listUser.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>operation</title>
</head>
<script type="text/javascript">
function del(){
if(confirm("你真的想删除该记录吗")){
return true;
}
return false;
}
</script>
<body>
<h1><font color="red">List User</font></h1>
<hr>
<table border="1" align="center" width="70%">
<tr>
<td>序号
</td>
<td>姓
</td>
<td>名
</td>
<td>年龄
</td>
<td>操作
</td>
</tr>
<c:forEach items="${list}" var="x">
<tr>
<td>${x.id}
</td>
<td>${x.firstname}
</td>
<td>${x.lastname }
</td>
<td>${x.age }
</td>
<td>
<a href='http://zy-oct.blog.163.com/blog/./showUserRecord.action?user.id=${x.id}'>修改</a>
<a href='http://zy-oct.blog.163.com/blog/./deleteUser.action?user.id=${x.id}' οnclick="return del()">删除</a>
</td>
</tr>
</c:forEach>
</table>
<a href="http://zy-oct.blog.163.com/blog/index.jsp" >首页</a>
<a href="http://zy-oct.blog.163.com/blog/save.jsp" >添加</a>
</body>
</html>
save.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>operation</title>
</head>
<body>
<h1><font color="red">Save User</font></h1>
<hr>
<s:form action="saveUser.action">
<s:textfield name="user.firstname" label="姓"/>
<s:textfield name="user.lastname" label="名"/>
<s:textfield name="user.age" label="年龄"/>
<s:submit></s:submit>
</s:form>
</body>
</html>
showRecord.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>operation</title>
</head>
<body>
<h1><font color="red">Show User Preview Records</font></h1>
<hr>
<s:form action="updateUser.action">
<s:textfield name="user.firstname" label="姓" />
<s:textfield name="user.lastname" label="名" />
<s:textfield name="user.age" label="年龄" />
<s:set name="u_id" value="user.id"/>
<s:hidden value="%{u_id}" name="user.id"/>
<s:submit></s:submit>
</s:form>
</body>
</html>