【MyEclipse】:SSH快速搭建

ssh搭建的前提,需要掌握 spring,struts2,hibernate

这是一种快速搭建的方式,框架基本上都是自动生成好。

如有不足之处,请指教!

@



目录



 

1、数据库表

create table users(
uid INT auto_increment PRIMARY KEY,
uname VARCHAR(20) NOT NULL,
usex VARCHAR(2) NOT NULL,
ubirth TIMESTAMP DEFAULT CURRENT_TIMESTAMP not null
)DEFAULT CHARSET=utf8;

insert into users values(null,"张珊",'女',DEFAULT);
insert into users values(null,"李四",'男',DEFAULT);
insert into users values(null,"王五",'男',DEFAULT);
insert into users values(null,"赵柳",'女',DEFAULT);


2、新建项目

2.1、创建一个web project项目

【MyEclipse】:SSH快速搭建_hibernate

2.2、导入spring

【MyEclipse】:SSH快速搭建_xml_02

【MyEclipse】:SSH快速搭建_hibernate_03

spring 添加玩以后,会多出很多的jar 包和一个配置文件 applicationContext.xml

【MyEclipse】:SSH快速搭建_xml_04

applicationContext.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"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">


</beans>


2.3、添加 struts2

导入 struts2

【MyEclipse】:SSH快速搭建_spring_05

【MyEclipse】:SSH快速搭建_xml_06

【MyEclipse】:SSH快速搭建_hibernate_07

项目结构

【MyEclipse】:SSH快速搭建_hibernate_08

struts.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>

</struts>


2.4、添加 Hibernate
  1. 导入hibernate

【MyEclipse】:SSH快速搭建_ssh_09

【MyEclipse】:SSH快速搭建_hibernate_10

【MyEclipse】:SSH快速搭建_xml_11

【MyEclipse】:SSH快速搭建_hibernate_12

【MyEclipse】:SSH快速搭建_xml_13

【MyEclipse】:SSH快速搭建_spring_14

  1. Hibernate 的配置自动添加到 applicationContext.xml 文件中
<!-- 连接池 -->
<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName"
value="com.mysql.jdbc.Driver">
</property>
<property name="url"
value="jdbc:mysql://localhost:3306/myschool">
</property>
<property name="username" value="root"></property>
<property name="password" value="root"></property>
</bean>

<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>
</props>
</property>
</bean>


2.5、逆向工程,生成实体类
  1. 连接 mysql 数据库

【MyEclipse】:SSH快速搭建_ssh_15

【MyEclipse】:SSH快速搭建_xml_16

【MyEclipse】:SSH快速搭建_struts_17

  1. 导入数据库表
    【MyEclipse】:SSH快速搭建_spring_18
    【MyEclipse】:SSH快速搭建_spring_19
    【MyEclipse】:SSH快速搭建_spring_20
    【MyEclipse】:SSH快速搭建_xml_21

项目结构

【MyEclipse】:SSH快速搭建_hibernate_22

  1. 在 applicationContext.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:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
">


<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName"
value="com.mysql.jdbc.Driver">
</property>
<property name="url"
value="jdbc:mysql://localhost:3306/myschool">
</property>
<property name="username" value="root"></property>
<property name="password" value="root"></property>
</bean>

<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>
</props>
</property>
<property name="mappingResources">
<list>
<value>com/ssh/pojo/Users.hbm.xml</value></list>
</property>
</bean>

<!-- 事务 -->
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>

<!-- 注解 -->
<tx:annotation-driven/>

<bean id="UsersDAO" class="com.ssh.pojo.UsersDAO">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>

</beans>


注意:

【MyEclipse】:SSH快速搭建_spring_23

2.6、配置 web.xml
  1. 配置 Context Params

【MyEclipse】:SSH快速搭建_hibernate_24

  1. Filters 过滤器

【MyEclipse】:SSH快速搭建_spring_25

【MyEclipse】:SSH快速搭建_hibernate_26

【MyEclipse】:SSH快速搭建_ssh_27

【MyEclipse】:SSH快速搭建_spring_28

【MyEclipse】:SSH快速搭建_spring_29

【MyEclipse】:SSH快速搭建_hibernate_30

【MyEclipse】:SSH快速搭建_hibernate_31

【MyEclipse】:SSH快速搭建_hibernate_32

  1. Listeners 监听器
    【MyEclipse】:SSH快速搭建_ssh_33
    【MyEclipse】:SSH快速搭建_struts_34
    【MyEclipse】:SSH快速搭建_struts_35
    【MyEclipse】:SSH快速搭建_spring_36
  2. 保存,web.xml就配置完了
  3. 部署到Tomcat服务器上,无报错,即搭建成功!
2.7、数据编写
  1. 建立基本结构
  • com.ssh.action
  • com.ssh.dao
  • com.ssh.pojo
  • com.ssh.service
  1. 实体类和dao层
    实体类
public class Users implements java.io.Serializable {
private Integer uid;
private String uname;
private String usex;
private Timestamp ubirth;

//get/set方法,有参无参构造函数,toString();
}


​ dao层

package com.ssh.dao;

import java.sql.Timestamp;
import java.util.List;
import org.hibernate.LockMode;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import com.ssh.pojo.Users;


public class UsersDAO extends HibernateDaoSupport {
private static final Logger log = LoggerFactory.getLogger(UsersDAO.class);
// property constants
public static final String UNAME = "uname";
public static final String USEX = "usex";

protected void initDao() {
// do nothing
}

public void save(Users transientInstance) {
log.debug("saving Users instance");
try {
getHibernateTemplate().save(transientInstance);
log.debug("save successful");
} catch (RuntimeException re) {
log.error("save failed", re);
throw re;
}
}

public void delete(Users persistentInstance) {
log.debug("deleting Users instance");
try {
getHibernateTemplate().delete(persistentInstance);
log.debug("delete successful");
} catch (RuntimeException re) {
log.error("delete failed", re);
throw re;
}
}

public Users findById(java.lang.Integer id) {
log.debug("getting Users instance with id: " + id);
try {
Users instance = (Users) getHibernateTemplate().get(
"com.ssh.pojo.Users", id);
return instance;
} catch (RuntimeException re) {
log.error("get failed", re);
throw re;
}
}

public List findByExample(Users instance) {
log.debug("finding Users instance by example");
try {
List results = getHibernateTemplate().findByExample(instance);
log.debug("find by example successful, result size: "
+ results.size());
return results;
} catch (RuntimeException re) {
log.error("find by example failed", re);
throw re;
}
}

public List findByProperty(String propertyName, Object value) {
log.debug("finding Users instance with property: " + propertyName
+ ", value: " + value);
try {
String queryString = "from Users as model where model."
+ propertyName + "= ?";
return getHibernateTemplate().find(queryString, value);
} catch (RuntimeException re) {
log.error("find by property name failed", re);
throw re;
}
}

public List findByUname(Object uname) {
return findByProperty(UNAME, uname);
}

public List findByUsex(Object usex) {
return findByProperty(USEX, usex);
}

public List findAll() {
log.debug("finding all Users instances");
try {
String queryString = "from Users";
return getHibernateTemplate().find(queryString);
} catch (RuntimeException re) {
log.error("find all failed", re);
throw re;
}
}

public Users merge(Users detachedInstance) {
log.debug("merging Users instance");
try {
Users result = (Users) getHibernateTemplate().merge(
detachedInstance);
log.debug("merge successful");
return result;
} catch (RuntimeException re) {
log.error("merge failed", re);
throw re;
}
}

public void attachDirty(Users instance) {
log.debug("attaching dirty Users instance");
try {
getHibernateTemplate().saveOrUpdate(instance);
log.debug("attach successful");
} catch (RuntimeException re) {
log.error("attach failed", re);
throw re;
}
}

public void attachClean(Users instance) {
log.debug("attaching clean Users instance");
try {
getHibernateTemplate().lock(instance, LockMode.NONE);
log.debug("attach successful");
} catch (RuntimeException re) {
log.error("attach failed", re);
throw re;
}
}

public static UsersDAO getFromApplicationContext(ApplicationContext ctx) {
return (UsersDAO) ctx.getBean("UsersDAO");
}
}


  1. Users.hbm.xml
    注意:里面的 not null = ‘true’ 需要删除,不然做曾删改时会报错!
    如果没删传对象时所有属性都不能为空!
<?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.ssh.pojo.Users" table="users" catalog="myschool">
<id name="uid" type="java.lang.Integer">
<column name="uid" />
<generator class="identity" />
</id>
<property name="uname" type="java.lang.String">
<column name="uname" length="20" />
</property>
<property name="usex" type="java.lang.String">
<column name="usex" length="2" />
</property>
<property name="ubirth" type="java.sql.Timestamp">
<column name="ubirth" length="19"/>
</property>
</class>
</hibernate-mapping>


  1. 编写Service层的接口和实现类
    接口
package com.ssh.service;

import java.util.List;

import com.ssh.pojo.Users;

public interface UsersService {
//查询所有用户
List<Users> queryUsersList();

//单值查询
Users queryUsers();

//添加
void addUsers(Users users);

//修改
void updateUsers(Users users);

//删除
void delUsers(Users users);
}


​ 实现类

package com.ssh.service;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;

import com.ssh.dao.UsersDAO;
import com.ssh.pojo.Users;

public class UsersServiceImpl implements UsersService {

private UsersDAO usersDAO;

public void setUsersDAO(UsersDAO usersDAO) {
this.usersDAO = usersDAO;
}

//添加
@Autowired
@Transactional
public void addUsers(Users users) {
usersDAO.save(users);

}

//删除
@Autowired
@Transactional
public void delUsers(Users users) {
usersDAO.delete(users);

}

//单值查询
public Users queryUsers(int uid) {
return (Users) usersDAO.findById(uid);
}


//查询所有
public List<Users> queryUsersList() {
return usersDAO.findAll();
}

//修改
@Autowired //自动装配
@Transactional //开启事务行为,曾删改
public void updateUsers(Users users) {
usersDAO.merge(users);

}

}


  1. 编写action层
package com.ssh.action;

import java.util.List;

import javax.servlet.http.HttpSession;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;
import com.ssh.pojo.Users;
import com.ssh.service.UsersService;

public class UsersAction extends ActionSupport {
private UsersService usersService;

private Users users;

private List<Users> list;

private int uid;

//get/set方法

public void setUsersService(UsersService usersService) {
this.usersService = usersService;
}

@Override
public String execute() throws Exception {
// TODO Auto-generated method stub
return super.execute();
}

//查询所有用户
public String list() throws Exception {
list = usersService.queryUsersList();
return "list";
}

//单值查询
public String query() throws Exception {
Users user = usersService.queryUsers(uid);
//获取session会话
HttpSession session = ServletActionContext.getRequest().getSession();
//给session赋值
session.setAttribute("user", user);
//返回
return "query";
}

//添加
public String add() throws Exception {
usersService.addUsers(users);
return list();
}

//删除
public String del() throws Exception {
usersService.delUsers(users);
return list();
}

//修改
public String update() throws Exception {
usersService.updateUsers(users);
return list();
}
}


  1. applicationContext.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:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
">


<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName"
value="com.mysql.jdbc.Driver">
</property>
<property name="url"
value="jdbc:mysql://localhost:3306/myschool">
</property>
<property name="username" value="root"></property>
<property name="password" value="root"></property>
</bean>

<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>
</props>
</property>
<property name="mappingResources">
<list>
<value>com/ssh/pojo/Users.hbm.xml</value></list>
</property>
</bean>

<!-- 事务 -->
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>

<!-- 注解 -->
<tx:annotation-driven/>

<!-- dao层 -->
<bean id="usersDAO" class="com.ssh.dao.UsersDAO">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>

<!-- service层 -->
<bean id="usersService" class="com.ssh.service.UsersServiceImpl">
<property name="usersDAO" ref="usersDAO"/>
</bean>

<!-- action层 -->
<bean id="usersAction" class="com.ssh.action.UsersAction">
<property name="usersService" ref="usersService"/>
</bean>

</beans>


  1. struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<package name="users" namespace="/users" extends="struts-default">
<action name="usersAction_*" method="{1}" class="com.ssh.action.UsersAction">
<result name="list">/list.jsp</result>
<result name="query">/update.jsp</result>
</action>
</package>
</struts>


3、视图层

index.jsp
<h1><a href="javaScript:location.href='users/usersAction_list'">去list.jsp</a></h1>


list.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">

<title>My JSP 'list.jsp' starting page</title>

<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->

</head>

<body>
<table align="center" cellpadding="1" cellspacing="1" border="1" width="600px;">
<caption><h1>用户信息</h1></caption>
<caption><h3><a href="add.jsp">添加用户</a></h3></caption>
<tr>
<th>编号</th>
<th>姓名</th>
<th>性别</th>
<th>生日</th>
<th>操作</th>
</tr>
<c:forEach items="${list}" var="user">
<tr>
<td>${user.uid }</td>
<td>${user.uname }</td>
<td>${user.usex }</td>
<td>${user.ubirth }</td>
<td>
<a href="javaScript:location.href='users/usersAction_query?uid=${user.uid}'">修改</a>
&emsp;
<a href="javaScript:delUsers(${user.uid})">删除</a>
</td>
</tr>
</c:forEach>
</table>
<script>
function delUsers(id){
if(confirm("确认删除吗?")){
location.href="users/usersAction_del?users.uid="+id;
}
}
</script>
</body>
</html>


add.jsp
<form action="users/usersAction_add" method="post">
<table align="center" cellpadding="1" cellspacing="1" border="1" width="300px;">
<caption><h3>添加用户</h3></caption>
<tr>
<th>姓名</th>
<td><input name="users.uname" type="text"/></td>
</tr>
<tr>
<th>性别</th>
<td>
<input name="users.usex" type="radio" value="男" checked="checked"/>男&emsp;
<input name="users.usex" type="radio" value="女"/>女
</td>
</tr>
<tr>
<th>生日</th>
<td><input name="users.ubirth" type="text"/></td>
</tr>
<tr>
<td colspan="2">
<input type="submit" value="提交"/>&emsp;
<input type="button" value="返回" onclick="javaScript:history.back()"/>
</td>
</tr>
</table>
</form>


update.jsp
<form action="users/usersAction_update" method="post">
<table align="center" cellpadding="1" cellspacing="1" border="1" width="300px;">
<caption><h3>添加用户</h3></caption>
<tr>
<input type="hidden" name="users.uid" value="${user.uid}"/>
<th>姓名</th>
<td><input name="users.uname" type="text" value="${user.uname}"/></td>
</tr>
<tr>
<th>性别</th>
<td>
<input name="users.usex" type="radio" value="男" checked="checked" />男&emsp;
<input name="users.usex" type="radio" value="女" ${user.usex=='女'?'checked':''} />女
</td>
</tr>
<tr>
<th>生日</th>
<td><input name="users.ubirth" type="text" value="${user.ubirth}"/></td>
</tr>
<tr>
<td colspan="2">
<input type="submit" value="提交"/>&emsp;
<input type="button" value="返回" onclick="javaScript:history.back()"/>
</td>
</tr>
</table>
</form>


执行效果:

【MyEclipse】:SSH快速搭建_spring_37

最终目录结构:

【MyEclipse】:SSH快速搭建_spring_38