刚接触SSH整合开发的时候不知道如何入手,下面分享一个简单实例来为大家讲解一下:
实例名称:用户管理系统 实现用户的添加、用户的删除、用户信息的更新以及查询4个操作
首先来搭建环境,struts2所用到的包:
Hibernate所用到的包:
Spring所用到的包:
此外还额外用到了三个log4j的包:
把这些包整合到WEB-INF的lib文件下,在在类路径下加入所需的包,基本环境就搭好了,搭好之后就可以开始我们的项目了 。
系统结构可分为如下几层:
- 表现层:由多个jsp页面组成
- MVC层:使用struts2框架技术
- 业务逻辑层:使用业务逻辑组件
- DAO层:由DAO组件构成
- Hibernate持久层:使用Hibernate3框架
- 数据库层:使用MySQL数据库来存储系统数据
数据库层实现:
在数据库中创建表格名为user,表中含有四个数据项:主键id,name,password,type
Hibernate持久层实现:
创建User类,包含四个字段,分别于数据库中四个字段相对应
package com.integration.entity;
public class User {
private int id;
private String name;
private String password;
private String type;
public User(int id, String name, String password, String type) {
this.id = id;
this.name = name;
this.password = password;
this.type = type;
}
public User() {
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
}
2.创建映射文件
映射文件用来映射持久化类和数据表。User类的映射文件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">
<!-- Generated 2017-11-15 20:15:11 by Hibernate Tools 3.5.0.Final -->
<hibernate-mapping>
<class name="com.integration.entity.User" table="USER">
<id name="id" type="int">
<column name="ID" />
<generator class="assigned" />
</id>
<property name="name" type="java.lang.String">
<column name="NAME" />
</property>
<property name="password" type="java.lang.String">
<column name="PASSWORD" />
</property>
<property name="type" type="java.lang.String">
<column name="TYPE" />
</property>
</class>
</hibernate-mapping>
DAO层设计:
DAO层设计主要包含SessionFactory的配置、DAO接口的创建以及DAO接口的实现类
1.Spring管理SessionFactory
新建applicationContext.xml文件,在该文件中定义数据源,并完成对SessionFactory的配置和管理。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="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-3.0.xsd">
<!-- 配置SessionFactory -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" >
<ref local="dataSource"/>
</property>
<!-- 配置Hibernate的属性 -->
<property name="hibernateProperties">
<props>
<!-- 数据库方言 -->
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<!-- 显示SQL语句 -->
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
<!-- 指定HIbernate映射文件的路径 -->
<property name="mappingResources">
<list>
<value>com/integration/entity/User.hbm.xml</value>
</list>
</property>
</bean>
<!-- 配置数据源 -->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName">
<value>com.mysql.jdbc.Driver</value>
</property>
<property name="url">
<value>jdbc:mysql://localhost:3306/xyz?characterEncoding=utf8&useSSL=true
</value>
</property>
<property name="username">
<value>root</value>
</property>
<property name="password">
<value>自己的密码</value>
</property>
</bean>
<!-- 配置相关Bean -->
<bean id="userDAO" class="com.integration.dao.UserDAOImpl"
abstract="false" lazy-init="default" autowire="default">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
<!-- 创建UserService实例-->
<bean id="userService" class="com.integration.service.UserServiceImpl">
<property name="userDAO" ref="userDAO"></property>
</bean>
<!--创建loginAction实例 -->
<bean id="loginAction" class="com.integration.action.LoginAction">
<property name="userService" ref="userService"></property>
</bean>
<!--创建userQueryAction实例 -->
<bean id="userQueryAction" class="com.integration.action.UserQueryAction">
<property name="userService" ref="userService"></property>
</bean>
<!--创建userAction实例 -->
<bean id="userAction" class="com.integration.action.UserAction">
<property name="userService" ref="userService"></property>
</bean>
<!--创建userDeleteAction实例 -->
<bean id="userDeleteAction" class="com.integration.action.UserDeleteAction">
<property name="userService" ref="userService"></property>
</bean>
<!-- 创建userUpdateAction实例-->
<bean id="userUpdateAction" class="com.integration.action.UserUpdateAction">
<property name="userService" ref="userService"></property>
</bean>
</beans>
2.创建DAO接口
创建UserDAO接口,在该接口定义了6中方法,可以实现添加用户、删除用户、更新用户、查找全部用户、
按用户名及按ID查询相应用户的操作。
package com.integration.dao;
import java.util.List;
import com.integration.entity.User;
public interface UserDAO {
void sava(User user); //添加用户
User getUser(String name); //按用户名查找用户
void delete(int id); //删除用户
void update(User user); //更新用户
User findById(int id); //按id查找用户
List<User> findAll(); //查找全部用户
}
3.创建DAO实现类
定义UserDAOImpl类,实现UserDAO接口。
package com.integration.dao;
import java.util.List;
import org.hibernate.Query;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import com.integration.entity.User;
public class UserDAOImpl extends HibernateDaoSupport implements UserDAO {
//添加用户
public void sava(User user) {
this.getHibernateTemplate().save(user);
}
//按用户名查找用户
public User getUser(String name) {
String hsql = "from User u where u.name='"+name+"'";
User result = (User)((Query) this.getHibernateTemplate().find(hsql)).uniqueResult();
return result;
}
//删除用户
public void delete(int id) {
this.getHibernateTemplate().delete(findById(id));
}
//更新用户
public void update(User user) {
this.getHibernateTemplate().update(user);
}
//按照Id查找用户
public User findById(int id) {
User user = this.getHibernateTemplate().get(User.class, id);
return user;
}
//查找所有用户
public List<User> findAll() {
String queryString = "from User";
List<User> list = this.getHibernateTemplate().find(queryString);
return list;
}
}
该类为UserDAO类的实现类,通过Spring集成Hibernate使用HibernateTemplate进行数据库访问,前提是Spring配置文件中给该类注入了SessionFactory。在Web应用中,SessionFactory和DAO对象都由Spring进行管理,因此不需要在代码中显示设置,在配置文件中配置依赖关系就好了。注入代码:
<bean id="userDAO" class="com.integration.dao.UserDAOImpl"
abstract="false" lazy-init="default" autowire="default">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
业务逻辑层设计:
1.创建业务逻辑组件接口
创建UserService接口,在该方法中定义了包含添加用户、删除用户、更新用户、按用户名查找用户、按id查找用户和查找全部用户6个方法。
package com.integration.service;
import java.util.List;
import com.integration.entity.User;
public interface UserService {
void savaUser(User user); //添加用户
User getUser(String name); //按用户名查找用户
void delete(int id); //删除用户
void update(User user); //更新用户
User findById(int id); //按id查找用户
List<User> findAll(); //查找全部用户
}
2.创建业务逻辑组件实现类
创建UserServiceImpl类,该类实现了UserService接口。UserServiceImpl类中通过调用DAO组件来实现业务逻辑实现类。
package com.integration.service;
import java.util.List;
import com.integration.dao.UserDAO;
import com.integration.entity.User;
public class UserServiceImpl implements UserService{
private UserDAO userDAO;
//提供UserDAO对象的注入通道
public void setUserDAO(UserDAO userDAO)
{
this.userDAO = userDAO;
}
//添加用户
public void savaUser(User user) {
if(userDAO.findById(user.getId())==null)
{
userDAO.sava(user);
} //调用DAO组件保存user对象
}
//按用户名查找用户
public User getUser(String name) {
return(userDAO.getUser(name));
} //调用DAO组件查询
//删除用户
public void delete(int id) {
if(userDAO.findById(id)!=null)
userDAO.delete(id); //调用DAO组件删除
}
//更新用户
public void update(User user) {
if(userDAO.findById(user.getId())!=null)
{
userDAO.update(user); //调用DAO组件更新
}
}
//查找
public User findById(int id) {
return userDAO.findById(id);
}
@Override
public List<User> findAll() {
return userDAO.findAll(); //调用DAO组件查询
}
}
该类在Spring配置文件applicationContext.xml文件中进行配置:
<!-- 创建UserService实例-->
<bean id="userService" class="com.integration.service.UserServiceImpl">
<property name="userDAO" ref="userDAO"></property>
</bean>
完成用户登录设计:
1.整合Struts2和Spring
webxml文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
<display-name>UserManagement001</display-name>
<welcome-file-list>
<welcome-file>login.jsp</welcome-file>
</welcome-file-list>
<!-- 定义核心Filter -->
<filter>
<filter-name>Struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>Struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!--配置Listener -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/classes/applicationContext.xml </param-value>
</context-param>
</web-app>
2.创建用户登录Action
创建用户登录Action,名称为LoginAction,该Action负责检查用户信息,如果数据库中存在该用户信息,则允许登录,返回页面,否则登录失败。
package com.integration.action;
import java.util.Iterator;
import java.util.List;
import com.integration.entity.User;
import com.integration.service.UserService;
import com.opensymphony.xwork2.ActionSupport;
public class LoginAction extends ActionSupport{
String username; //用户名
String password; //密码
String usertype; //用户类型
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getUsertype() {
return usertype;
}
public void setUsertype(String usertype) {
this.usertype = usertype;
}
private UserService userService;
//设置业务逻辑组件
public void setUserService(UserService userService) {
this.userService = userService;
}
public String execute(){
List<User> list = (List<User>)userService.findAll();
User u = new User();
String page = "failer";
Iterator<User> it = list.iterator();
//检查用户信息是否存在数据库中
while(it.hasNext())
{
u = (User)it.next();
if(username.trim().equals(u.getName())
&&password.trim().equals(u.getPassword())&&usertype.trim().equals(u.getType()))
{
page = "success";
break;
}
}
return page;
}
}
3.用户登录页面
创建登录页面login.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" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>用户登录</title>
</head>
<body>
<s:form action="login" method="post" >
<s:textfield name="username" label="用户名"/>
<s:password name="password" label="密码"/>
<s:textfield name="usertype" label="类型"/>
<s:submit value="提交"/>
</s:form>
</body>
</html>
4.配置控制器
在applicationContext.xml中配置控制器LoginAction并注入业务逻辑组件代码如下:
<bean id="loginAction" class="com.integration.action.LoginAction">
<property name="userService" ref="userService"></property>
</bean>
在struts.xml文件中配置loginAction,并定义处理结果与视图资源的关系,代码如下:
<action name="login" class="com.integration.action.LoginAction">
<result name="success" type="redirect">/userquery.action</result>
<result name="failer">/error.jsp</result>
</action>
到此运行项目,可以看到我们的登录界面了,剩余操作思路和上面一样,就不一一列举了。
项目源码下载: