在上篇博客里,介绍了Tomcat的配置与Struts2的搭建,如果对这个还不会的童鞋去看一下我的上篇博客 Eclipse搭建SSH框架(上)-JAVA,今天我们接着上篇博客的内容,继续搭建我们滴SSH框架。
(一)在上篇博客的基础上整合Spring:
在整合Spring之前到把准备工作做好
1.首先要映射数据库表,在src下的entity中创建User.java类(里面对应表的字段,生成get set方法):
package com.cf.entity;
public class User {
private Integer id;
private String name;
private String pwd;
private String userName;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + ", pwd=" + pwd + ", userName=" + userName + "]";
}
}
然后在同一级创建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">
<!-- Mapping file autogenerated by MyEclipse Persistence Tools -->
<hibernate-mapping>
<class name="com.cf.entity.User" table="USERDETAILS"><!-- name:对应包名 table:对应数据库表名 -->
<id name="id">
<column name="ID" /><!-- id:对应数据库表的id generator:生成策略-->
<generator class="increment" />
</id>
<property name="userName" type="java.lang.String"><!-- name:对应数据库字段名 type:对应数据库字段类型 -->
<column name="userName" />
</property>
<property name="pwd" type="java.lang.String">
<column name="pwd" />
</property>
<property name="name" type="java.lang.String">
<column name="name" />
</property>
</class>
</hibernate-mapping>
在说一下Hibernate映射文件(类与表之间的关系映射):
<hibernate-mapping>
<class name="类名" table="表名">
<!-- 主键 -->
<id name="主键名">
<column name="主键列" />
<!-- 主键生成器 -->
<generator class="生成策略" />
</id>
<property name="属性名" type="数据类型">
<column name="列名" length="长度" not-null="是否不为空" />
</property>
</class>
</hibernate-mapping>
2.写完entity包后 接下来写dao包,在src下的dao包中创建TowDao.java的接口:
package com.cf.dao;
import java.util.List;
import com.cf.entity.User;
public interface TowDao {
public List<User> findUser();
public void insert(User TowDao);
public boolean UpData(User user);
public boolean Delect(int userid);
public User findData(int userid);
}
接着在src下的dao包中创建impl包,然后创建TowDaoimpl.java文件,然后实现TowDao接口:
package com.cf.dao.impl;
import java.util.List;
import com.cf.dao.TowDao;
import com.cf.entity.User;
public class TowDaoimpl implements TowDao{
@Override
public List<User> findUser() {
// TODO Auto-generated method stub
return null;
}
@Override
public void insert(User TowDao) {
// TODO Auto-generated method stub
}
@Override
public boolean UpData(User user) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean Delect(int userid) {
// TODO Auto-generated method stub
return false;
}
@Override
public User findData(int userid) {
// TODO Auto-generated method stub
return null;
}
}
3.接着在src下的service包下面创建Towsercice.java接口,然后继承dao中的TowDao接口:
package com.cf.service;
import com.cf.dao.TowDao;
public interface Towsercice extends TowDao{
}
接着在src下的service包中创建impl包,然后创建Towserviceimpl.java文件,然后实现Towsercice接口:
package com.cf.service.impl;
import java.util.List;
import com.cf.entity.User;
import com.cf.service.Towsercice;
public class Towserviceimpl implements Towsercice{
@Override
public List<User> findUser() {
// TODO Auto-generated method stub
return null;
}
@Override
public void insert(User TowDao) {
// TODO Auto-generated method stub
}
@Override
public boolean UpData(User user) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean Delect(int userid) {
// TODO Auto-generated method stub
return false;
}
@Override
public User findData(int userid) {
// TODO Auto-generated method stub
return null;
}
}
实现Towsercice接口后 要在Towserviceimpl的前面加上"@Transactional"注解 ,再创建一个私有的公共遍历 private TowDao towDao;,然后生成TowDao 的 get set方法,接着在每一个方法中返回dao中对应的方法:
package com.cf.service.impl;
import java.util.List;
import org.springframework.transaction.annotation.Transactional;
import com.cf.dao.TowDao;
import com.cf.entity.User;
import com.cf.service.Towsercice;
@Transactional//注解
public class Towserviceimpl implements Towsercice{
private TowDao towDao;
@Override
public List<User> findUser() {
// TODO Auto-generated method stub
return towDao.findUser();
}
@Override
public void insert(User TowDao) {
// TODO Auto-generated method stub
towDao.insert(TowDao);
}
@Override
public boolean UpData(User user) {
// TODO Auto-generated method stub
return towDao.UpData(user);
}
@Override
public boolean Delect(int userid) {
// TODO Auto-generated method stub
return towDao.Delect(userid);
}
@Override
public User findData(int userid) {
// TODO Auto-generated method stub
return towDao.findData(userid);
}
public TowDao getTowDao() {
return towDao;
}
public void setTowDao(TowDao towDao) {
this.towDao = towDao;
}
}
service写完后,接着在dao下的impl中写交互数据库的语句:
在src->dao->impl->TowDaoimpl中 注册sessionFactory工厂
package com.cf.dao.impl;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import com.cf.dao.TowDao;
import com.cf.entity.User;
public class TowDaoimpl extends HibernateDaoSupport implements TowDao{
@Autowired
SessionFactory
sessionFactory;//org/springframework/orm/hibernate3/HibernateTemplate
//SessionFactory接口:SessionFactroy接口负责初始化Hibernate。它充当数据存储源的代理,并负责创建Session对象
@Override
public List<User> findUser() {
List<User> list=null;
Query query=sessionFactory.openSession().createQuery("from User");
list=query.list();
return list;
}
@Override
public void insert(User TowDao) {
// TODO Auto-generated method stub
}
@Override
public boolean UpData(User user) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean Delect(int userid) {
// TODO Auto-generated method stub
return false;
}
@Override
public User findData(int userid) {
// TODO Auto-generated method stub
return null;
}
}
在写完TowDaoimpl后,接下来要在 src->action 中调用dao的方法来获取数据再返回界面:
package com.cf.action;
import java.util.ArrayList;
import java.util.List;
import com.cf.entity.User;
import com.cf.service.Towsercice;
import com.opensymphony.xwork2.ActionSupport;
public class OneAction extends ActionSupport{
/**
*
*/
private static final long serialVersionUID = 1L;
private Towsercice towsercice;
User user;
private List<User> list=new ArrayList<User>();
private int id;
private String userName;
private String pwd;
private String name;
List<User> Listuser;
public String execute(){
String name=this.userName;
String password=this.pwd;
String text=this.name;
System.out.println(password);
Listuser=towsercice.findUser();
//request.getSession().setAttribute("user", list);
return SUCCESS;
}
public Towsercice getTowsercice() {
return towsercice;
}
public void setTowsercice(Towsercice towsercice) {
this.towsercice = towsercice;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public List<User> getList() {
return list;
}
public void setList(List<User> list) {
this.list = list;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<User> getListuser() {
return Listuser;
}
public void setListuser(List<User> listuser) {
Listuser = listuser;
}
}
上面的写完后,先创建一个登陆的jsp:
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>用户登陆界面</title>
</head>
<body>
<form action="executeLogin.action" method="post" name="regForm">
<table>
<tr>
<td>用户名</td>
<td><input type="text" name="userName" size="15" /></td>
</tr>
<tr>
<td>密码</td>
<td><input type="pwd" name="pwd" size="15" /></td>
</tr>
<tr>
<td>姓名</td>
<td><input type="text" name="name" size="15" /></td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="注册"></td>
</tr>
</table>
</form>
</body>
</html>
然后要在jsp中接收数据,所以要修改/SSH/WebContent/jsp/regsuccess.jsp:
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
<h1>登录成功</h1>
<table>
<thead>
<tr>
<td>名字</td>
<td>密码</td>
<td>用户名</td>
</tr>
</thead>
<c:forEach items="${Listuser}" var="Listuser">
<tr>
<td style="display:none;">${Listuser.id}</td>
<td>${Listuser.name}</td>
<td>${Listuser.pwd}</td>
<td>${Listuser.userName}</td>
<td><a href="delectUserLogin.action?id=${Listuser.id}">删除</a></td>
<td><a href="findDataLogin.action?id=${Listuser.id}">修改</a></td>
</tr>
</c:forEach>
</table>
<a href="/SSH/jsp/insertuser.jsp">新增</a>
</body>
</html>
准备完后在src下创建名为:applicationContext.xml文件(和struts.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"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.1.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.1.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.1.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd" default-autowire="byName">
<!-- 开启注解 -->
<context:annotation-config />
<!-- spring 扫描路径,注意当前工程只需要扫描dao和service,srpingmvc或者struts2注解才有变化 -->
<context:component-scan base-package="cf.it" /><!-- 这里要对应包名 -->
<!-- 配置数据源 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver" /><!-- 指定连接数据库的驱动 -->
<property name="url" value="jdbc:mysql://localhost:3306/test" /><!-- 指定连接数据库的URL -->
<property name="username" value="root" /><!-- 指定连接数据库的用户名 -->
<property name="password" value="root" /><!-- 指定连接数据库的密码 -->
</bean>
<!-- 配置SessionFactory -->
<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>
<prop key="hibernate.hbm2ddl.auto">update</prop>
<prop key="hibernate.connection.autocommit">true </prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="sql_format">true</prop>
</props>
</property>
<property name="mappingResources">
<!-- 指定hibernate映射文件 -->
<list>
<value>com/cf/entity/User.hbm.xml</value>
<!-- 这里就是我们的框架用到Hibernate,写映射表后,但是别忘了配置文件中指定。 -->
</list>
</property>
</bean>
<bean id="loginService" class="com.cf.service.impl.Towserviceimpl"></bean>
<bean id="loginServer" class="com.cf.action.OneAction" scope="prototype">
<property name="loginService" ref="loginService"></property>
</bean>
<!-- Dao配置 -->
<bean id="towDao" class="com.cf.dao.impl.TowDaoimpl">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<!-- Action配置 -->
<bean id="reg" class="com.cf.action.OneAction" scope="prototype">
<property name="towsercice" ref="towsercice"></property>
</bean>
<!-- Service配置 -->
<bean id="towsercice" class="com.cf.service.impl.Towserviceimpl">
<property name="towDao" ref="towDao"></property>
</bean>
<!-- 配置声明式事务管理(采用注解的方式) 不写这个事务是操作不了数据库的 比如:不能新增 不能删除 -->
<bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<!-- 开启注解事务 -->
<tx:annotation-driven transaction-manager="txManager" />
</beans>
以上都配置好后 启动项目 效果如下:
这样就查询就成功了。接下来就 增 删 改就简单多了。
先在sshTow->WebContent->jsp->下创建一个fail.jsp,是失败返回的jsp:
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
失败!!!
</body>
</html>
然后在创建insertuser.jsp(用于新增):
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
<form action="insertuserLogin.action" method="post" name="regForm">
<table>
<tr>
<td>用户名</td>
<td><input type="text" name="userName" size="15" /></td>
</tr>
<tr>
<td>密码</td>
<td><input type="pwd" name="pwd" size="15" /></td>
</tr>
<tr>
<td>姓名</td>
<td><input type="text" name="name" size="15" /></td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="新增"></td>
</tr>
</table>
</form>
</body>
</html>
顺便把修改的updata.jsp也创建了:
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
${user.userName}
<form action="UpDataLogin.action" method="post" name="regForm">
<table>
<tr>
<td>用户名</td>
<td><input type="text" name="userName" value="${user.userName}" size="15" /></td>
<td><input style="display: none" type="text" name="id" value="${user.id}" size="15" /></td>
</tr>
<tr>
<td>密码</td>
<td><input type="pwd" name="pwd" value="${user.pwd}" size="15" /></td>
</tr>
<tr>
<td>姓名</td>
<td><input type="text" name="name" value="${user.name}"size="15" /></td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="修改"></td>
</tr>
</table>
</form>
</body>
</html>
上面的jsp都创建好后,在struts.xml中补全跳转jsp:
<?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="action" extends="struts-default" >
<action name="*Login" class="com.cf.action.OneAction">
<result name="success">/jsp/regsuccess.jsp</result>
<result name="loginsuccess">/jsp/index.jsp</result>
<result name="fail">/jsp/fail.jsp</result>
<result name="insert">/jsp/insert.jsp</result>
<result name="updata">/jsp/updata.jsp</result>
</action>
</package>
</struts>
接下来就是补全src->dao->impl->TowDaoimpl.java中的增 删 改 操作了:
package com.cf.dao.impl;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import com.cf.dao.TowDao;
import com.cf.entity.User;
public class TowDaoimpl extends HibernateDaoSupport implements TowDao{
@Autowired
SessionFactory
sessionFactory;//org/springframework/orm/hibernate3/HibernateTemplate
//SessionFactory接口:SessionFactroy接口负责初始化Hibernate。它充当数据存储源的代理,并负责创建Session对象
@Override
public List<User> findUser() {
List<User> list=null;
Query query=sessionFactory.openSession().createQuery("from User");
list=query.list();
return list;
}
@Override
public void insert(User TowDao) {
// TODO Auto-generated method stub
getHibernateTemplate().save(TowDao);
}
@Override
public boolean UpData(User user) {
// TODO Auto-generated method stub
boolean falg=false;
try{
getHibernateTemplate().update(user);
falg=true;
}catch (Exception e) {
e.printStackTrace();
}
return falg;
}
@Override
public boolean Delect(int userid) {
boolean falg=false;
try{
User user =new User();
user.setId(userid);
getHibernateTemplate().delete(user);
falg=true;
}catch (Exception e) {
e.printStackTrace();
}
return falg;
}
@Override
public User findData(int userid) {
// TODO Auto-generated method stub
return (User) sessionFactory.getCurrentSession().get(User.class,userid);
}
}
然后在补全src->co->cf->action->OneAction.java中的增 删 改 :
package com.cf.action;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.ServletActionContext;
import com.cf.entity.User;
import com.cf.service.Towsercice;
import com.opensymphony.xwork2.ActionSupport;
public class OneAction extends ActionSupport{
/**
*
*/
private static final long serialVersionUID = 1L;
public HttpServletRequest request=ServletActionContext.getRequest();
public HttpServletResponse reaponse=ServletActionContext.getResponse();
private Towsercice towsercice;
User user;
private List<User> list=new ArrayList<User>();
private int id;
private String userName;
private String pwd;
private String name;
List<User> Listuser;
public String execute(){
String name=this.userName;
String password=this.pwd;
String text=this.name;
System.out.println(password);
Listuser=towsercice.findUser();
//request.getSession().setAttribute("user", list);
return SUCCESS;
}
public String UpData(){
Integer id=this.id;
String name=this.userName;
String password=this.pwd;
String text=this.name;
User user=new User();
user.setId(id);
user.setName(text);
user.setUserName(name);
user.setPwd(password);
boolean UpDataUser=towsercice.UpData(user);
if(UpDataUser){
Listuser=towsercice.findUser();
return SUCCESS;
}else{
return "fail";
}
}
public String findData(){
int user_id =Integer.parseInt(request.getParameter("id"));
user=towsercice.findData(user_id);
return "updata";
}
public String insertuser(){
User user=new User();
user.setName(name);
user.setUserName(userName);
user.setPwd(pwd);
towsercice.insert(user);
Listuser=towsercice.findUser();
return SUCCESS;
}
public String delectUser() throws Exception{
int user_id =Integer.parseInt(request.getParameter("id"));
boolean delectuser=towsercice.Delect(user_id);
if(delectuser){
Listuser=towsercice.findUser();
return SUCCESS;
}else{
return "fail";
}
}
public Towsercice getTowsercice() {
return towsercice;
}
public void setTowsercice(Towsercice towsercice) {
this.towsercice = towsercice;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public List<User> getList() {
return list;
}
public void setList(List<User> list) {
this.list = list;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<User> getListuser() {
return Listuser;
}
public void setListuser(List<User> listuser) {
Listuser = listuser;
}
}
最后附一张全图:
到这里搭建SSH到这里就结束啦,代码中有有些地方没有封装的,就看着来封装),如有疑问,请给我留言~~ QQ:304966802
源码->Eclipse搭建SSH框架-JAVA(源码+数据库)
注意:
1.这里的calss是对应包名 不要写错了喔! Dao Action Service 的配置 id要对应