ssh2整合的一個小Demo

隨意寫的一個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,大家有空的話可以下載下來練下手,這些等以後有時間再加上去玩玩。









發佈了73 篇原創文章 · 獲贊 3 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章