隨意寫的一個ssh2整合的一個小Demo,代碼較簡單,當做是打發下時間。
項目源碼:http://download.csdn.net/detail/huangzebiao007/6847759
項目截圖:
一、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:util="http://www.springframework.org/schema/util"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">
<!-- 數據源配置,這裏使用dbcp數據源 -->
<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/ssh2?useUnicode=true&characterEncoding=UTF-8" />
<property name="username" value="root" />
<property name="password" value="root" />
<!-- 連接池啓動時的初始值 -->
<property name="initialSize" value="1" />
<!-- 連接池的最大值 -->
<property name="maxActive" value="20" />
<!-- 最大空閒值。當經過一個高峯時間後,連接池可以慢慢將已經用不到的連接慢慢釋放一部分,一直減少到maxIdle爲止 -->
<property name="minIdle" value="3" />
<property name="maxIdle" value="20" />
<!-- 最小空閒值。當空閒的連接數少於閥值時,連接池就會預申請去一些連接,以免洪峯來時來不及申請 -->
<property name="maxWait" value="60000" />
<property name="defaultAutoCommit" value="true" />
<!--#在取出連接時進行有效驗證-->
<property name="removeAbandoned" value="true" />
<property name="removeAbandonedTimeout" value="180" />
</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.show_sql">false</prop>
<prop key="hibernate.format_sql">false</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
</props>
</property>
<!-- Mapping 到對應的Bo文件 -->
<property name="mappingResources">
<list>
<value>com/hzb/xml/TUser.hbm.xml</value>
</list>
</property>
</bean>
<!-- DAO的聲明配置 -->
<bean id="UserDAO" class="com.hzb.dao.UserDAO">
<property name="sessionFactory">
<ref local="sessionFactory" />
</property>
</bean>
<!-- business的聲明配置 -->
<bean id="UserBusiness" class="com.hzb.business.UserBusiness">
<property name="userDAO">
<ref bean="UserDAO"/>
</property>
</bean>
<!-- action的聲明配置 -->
<bean id="UserAction" class="com.hzb.action.UserAction">
<property name="userBusiness">
<ref bean="UserBusiness"/>
</property>
</bean>
</beans>
二、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="hzb" extends="struts-default">
<action name="*" class="UserAction" method="{1}">
<result name="saveUser">/success.jsp</result>
<result name="deleteUser">/success.jsp</result>
<result name="updateUser">/success.jsp</result>
<result name="getUser">/update.jsp</result>
<result name="getUsers">/index.jsp</result>
<result name="input">/input.jsp</result>
</action>
</package>
</struts>
三、在web.xml中配置框架
<?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">
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<!-- 集成struts2框架 -->
<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>
<!-- 集成spring框架 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:/applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
</web-app>
四、在mysql數據庫中建立一個ssh2數據庫,建好一張表,然後使用myeclipse生成po類和hbm.xml文件
package com.hzb.po;
// default package
/**
* TUser entity. @author MyEclipse Persistence Tools
*/
public class TUser implements java.io.Serializable {
private static final long serialVersionUID = 1268989912439906808L;
private Long id;
private String name;
private Integer age;
// Constructors
/** default constructor */
public TUser() {
}
/** full constructor */
public TUser(String name, Integer age) {
this.name = name;
this.age = age;
}
// Property accessors
public Long getId() {
return this.id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return this.age;
}
public void setAge(Integer age) {
this.age = age;
}
}
<?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.hzb.po.TUser" table="t_user" catalog="ssh2">
<id name="id" type="java.lang.Long">
<column name="id" />
<generator class="identity" />
</id>
<property name="name" type="java.lang.String">
<column name="name" length="50" />
</property>
<property name="age" type="java.lang.Integer">
<column name="age" />
</property>
</class>
</hibernate-mapping>
五、編寫DAO層:先建好一個BaseDAO類,裏面包含一些基本的DAO方法,然後所有的DAO類都繼承該類
package com.hzb.dao;
import java.util.List;
import org.hibernate.Session;
import org.springframework.orm.hibernate3.SessionFactoryUtils;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
/**
* 所實現的DAO類必須繼承BaseDAO, BaseDAO提供了一組常用的持久方法. 在使用時只需要直接調用即可.
*/
public abstract class BaseDAO extends HibernateDaoSupport {
/**
* 將對象持久化到數據庫中.
*
* @param transientInstance
* - 持久化對象.
*/
public void save(Object transientInstance) {
getHibernateTemplate().save(transientInstance);
}
/**
* 更新方法.
*
* @param detachedInstance
* - 持久化對象.
*/
public void update(Object detachedInstance) {
getHibernateTemplate().update(detachedInstance);
}
/**
* 更新方法.
*
* @param detachedInstance
* - 持久化對象.
* @return - Object 更新後的持久化對象.
*/
public Object merge(Object detachedInstance) {
return getHibernateTemplate().merge(detachedInstance);
}
/**
* 新增或更新方法.
*
* @param transientInstance
* - 持久化對象.
*/
public void saveOrUpdate(Object transientInstance) {
getHibernateTemplate().saveOrUpdate(transientInstance);
}
/**
* 刪除方法.
*
* @param persistentInstance
* - 持久化對象.
*/
public void delete(Object persistentInstance) {
getHibernateTemplate().delete(persistentInstance);
}
/**
* 根據主鍵(id)進行查找一條數據.
*
* @param id
* - 要查找的主鍵(id).
* @return - 返回一個Object對象, 在使用方需要轉型.
*/
public Object get(Class<?> clazz, long id) {
return getHibernateTemplate().get(clazz, id);
}
/**
* 根據主鍵(id)進行查找一條數據.
*
* @param id
* - 要查找的主鍵(id).
* @return - 返回一個Object對象, 在使用方需要轉型.
*/
public Object get(Class<?> clazz, String id) {
return getHibernateTemplate().get(clazz, id);
}
/**
* 根據傳入ID查找數據
*
* @param id
* @return
*/
public Object load(Class<?> clazz, long id) {
return getHibernateTemplate().load(clazz, id);
}
/**
* 根據傳入ID查找數據
*
* @param id
* @return
*/
public Object load(Class<?> clazz, String id) {
return getHibernateTemplate().load(clazz, id);
}
/**
* 根據傳入hql查找數據
*
* @param hql
* @return
*/
public List<?> find(String hql) {
return getHibernateTemplate().find(hql);
}
/**
* 根據傳入hql查找數據
*
* @param hql
* ,attrs,values
* @return
*/
public List<?> findByNamedParam(String hql, String[] attrs, Object[] values) {
if (null != attrs && null != values && attrs.length == values.length) {
return getHibernateTemplate().findByNamedParam(hql, attrs, values);
} else {
return null;
}
}
/**
* 在SessionFactory中獲取Session對象.
*
* @return - Hibernate Session對象.
*/
public Session getCurrentSession() {
return SessionFactoryUtils.getSession(getSessionFactory(), true);
}
/**
* 在SessionFactory中關閉Session對象.
*/
public void closeSession(Session session) {
SessionFactoryUtils.releaseSession(session, getSessionFactory());
}
}
package com.hzb.dao;
public class UserDAO extends BaseDAO {
}
六、編寫business層
package com.hzb.business;
import java.util.List;
import com.hzb.dao.UserDAO;
import com.hzb.po.TUser;
public class UserBusiness {
private UserDAO userDAO;
public void setUserDAO(UserDAO userDAO) {
this.userDAO = userDAO;
}
public void saveUser(String name,int age){
TUser user = new TUser();
user.setName(name);
user.setAge(age);
userDAO.save(user);
}
public void deleteUser(long id){
userDAO.delete(getUser(id));
}
public void updateUser(long id,String name,int age){
TUser user = getUser(id);
if(null != user){
if(null != name){
user.setName(name);
}
if(age > 0){
user.setAge(age);
}
userDAO.update(user);
}
}
public TUser getUser(long id){
return (TUser)userDAO.get(TUser.class, id);
}
public List<TUser> getUsers(){
String hql = "from TUser order by id desc";
return (List<TUser>) userDAO.find(hql);
}
}
七、編寫action層
package com.hzb.action;
import java.util.List;
import com.hzb.business.UserBusiness;
import com.hzb.po.TUser;
import com.opensymphony.xwork2.ActionSupport;
public class UserAction extends ActionSupport{
private static final long serialVersionUID = -747838315425274747L;
private UserBusiness userBusiness;
private long id;
private String name;
private int age;
private TUser tuser;
private List<TUser> userlist;
public void setUserBusiness(UserBusiness userBusiness) {
this.userBusiness = userBusiness;
}
public String saveUser(){
if(null != name && !"".equals(name) && age > 0){
userBusiness.saveUser(name, age);
return "saveUser";
}else{
return INPUT;
}
}
public String deleteUser(){
if(id != 0){
userBusiness.deleteUser(id);
return "deleteUser";
}else{
return INPUT;
}
}
public String updateUser(){
if(id != 0){
userBusiness.updateUser(id, name, age);
return "updateUser";
}else{
return INPUT;
}
}
public String getUser(){
if(id != 0){
tuser = userBusiness.getUser(id);
return "getUser";
}else{
return INPUT;
}
}
public String getUsers(){
userlist = userBusiness.getUsers();
return "getUsers";
}
public String execute() {
return "success";
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public TUser getTuser() {
return tuser;
}
public void setTuser(TUser tuser) {
this.tuser = tuser;
}
public List<TUser> getUserlist() {
return userlist;
}
public void setUserlist(List<TUser> userlist) {
this.userlist = userlist;
}
}
八、編寫頁面
index.jsp
<table border = "1">
<tr><td width=100>id編號</td><td width=100>姓名</td><td width=100>年齡</td><td width=200>刪除</td><td width=100>更新</td></tr>
<s:iterator value="userlist">
<tr>
<td><s:property value="id"/></td>
<td><s:property value="name"/></td>
<td><s:property value="age"/></td>
<td><a href="deleteUser.action?id=<s:property value='id'/>">刪除</a></td>
<td><a href="getUser.action?id=<s:property value='id'/>">更新</a></td>
</tr>
</s:iterator>
</table>
<a href="add.jsp">添加數據</a>
add.jsp
<script type="text/javascript">
function check() {
if (myForm.name.value==""){
alert("姓名不能爲空!");myForm.name.focus();return;
}
if (myForm.age.value==""){
alert("年齡不能爲空!");myForm.age.focus();return;
}
myForm.submit();
}
</script>
<form action="saveUser" id="myForm">
<table border = "1">
<tr><td width=100>姓名:</td><td width=400><input name="name" id="name" type="text" style="width:300px"/></td></tr>
<tr><td width=100>年齡:</td><td width=400><input name="age" id="age" type="text" style="width:300px"/></td></tr>
<tr><td colspan="2"><input type="button" οnclick="check();" value="保存" class="button"/></td></tr>
</table>
</form>
update.jsp
<script type="text/javascript">
function check() {
if (myForm.name.value==""){
alert("姓名不能爲空!");myForm.name.focus();return;
}
if (myForm.age.value==""){
alert("年齡不能爲空!");myForm.age.focus();return;
}
myForm.submit();
}
</script>
<form action="updateUser" id="myForm">
<s:hidden name="id" value="%{tuser.id}"></s:hidden>
<table border = "1">
<tr><td width=100>姓名:</td><td width=400><input name="name" id="name" value="<s:property value='tuser.name'/>" type="text" style="width:300px"/></td></tr>
<tr><td width=100>年齡:</td><td width=400><input name="age" id="age" value="<s:property value='tuser.age'/>" type="text" style="width:300px"/></td></tr>
<tr><td colspan="2"><input type="button" οnclick="check();" value="保存" class="button"/></td></tr>
</table>
</form>
success.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
out.println("<script language='javascript'>alert('操作成功');window.location.href='getUsers.action';</script>");
%>
九、部署到tomcat後輸入http://localhost:8080/ssh2/getUsers.action測試下效果
由於是練下手,所以很多東西都不完善,spring事務處理,hibernate緩存、分頁等也沒弄,前臺可以集成extjs,大家有空的話可以下載下來練下手,這些等以後有時間再加上去玩玩。