ssh框架搭建Struts2.06+spring2.5+hibernate3.2整合实例代码教程步骤

来源:互联网 发布:科比单场81分数据 编辑:程序博客网 时间:2024/05/16 09:30

原创整理不易,转载请注明出处:ssh框架搭建Struts2.06+spring2.5+hibernate3.2整合实例代码教程步骤

代码下载地址:http://www.zuidaima.com/share/1760074977233920.htm

最近闲来无事可做,于是开始学习struts2。Struts2和struts1、webwork2有什么区别我也不说了,网上有很多这方面的资料。以前在项目中从未使用过struts,一直使用spring+hibernate,现在既然学习了Struts,也不能浪费,于是乎开始琢磨着怎么整合这3个框架。整合原理以spring为容器,管理hibernate的DAO和Struts2的Action。
一、 准备工作
Struts2.06+spring2.5+hibernate3.2+jdk6.0+myeclipse6.0+tomcat5.5+mysql5.0
以上是整合的原料。下面以一个注册登陆的例子来开始我们的整合过程。
这个例子很简单,下面是它的sql脚本内容:

CREATE TABLE `zuidaima_user` (  `userid` int(11) NOT NULL AUTO_INCREMENT,  `username` varchar(20) NOT NULL,  `password` varchar(16) NOT NULL,  `email` varchar(30) NOT NULL,  PRIMARY KEY (`userid`)) ENGINE=InnoDB DEFAULT CHARSET=utf-8;


二、 开始行动
包结构可以参考下图
 
图一

 图二

图三
1) Struts部分:建立struts.xml和struts.properties
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 ="user_curd"  extends ="struts-default"  >         <global-results>             <!--  下面定义的结果对所有的Action都有效  -->             <result  name ="exception"> /error.jsp </result>         </global-results>         <global-exception-mappings>             <!--  指Action抛出Exception异常时,转入名为exception的结果。  -->             <exception-mapping  exception ="java.lang.Exception"  result ="exception" />         </global-exception-mappings>         <action  name ="Login"  class ="LoginAction">             <result  name ="success"> /success.jsp </result>                  <result  name ="input"> /login.jsp </result>         </action>         <action  name ="Regist"  class ="RegistAction">             <result  name ="success"> /success.jsp </result>                  <result  name ="input"> /regist.jsp </result>         </action>     </package>   </struts>


Struts.properties内容如下:

struts.devMode = falsestruts.enable.DynamicMethodInvocation = truestruts.i18n.reload = truestruts.ui.theme =xhtmlstruts.locale = zh_CNstruts.i18n.encoding = UTF- 8struts.objectFactory = springstruts.objectFactory.spring.autoWire = namestruts.serve.static.browserCache = falsestruts.url.includeParams = none


2) 建立User.java和User.hbm.xml、jdbc.properties:
User.java内容如下:

/**  *  * @author <a href="mailto:flustar2008@163.com">flustar</a> * @version 1.0  * Creation date: Dec 23, 2007 1:55:28 PM */package com.firstssh.model;import java.io.Serializable;public class User implements Serializable {    private int id;    private String username;    private String password;    private String email;    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 getPassword() {        return password;    }    public void setPassword(String password) {        this.password = password;    }    public String getEmail() {        return email;    }    public void setEmail(String email) {        this.email = email;    }}


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"><hibernate-mapping     package="com.firstssh.model">    <class name="User" table="User">        <id name="id" column="userid">            <generator class="identity" />        </id>            <property name="username"                  column="username"                  not-null="true"                  length="20"        />        <property name="password"                  column="password"                  not-null="true"                  length="16" />        <property name="email"                  column="email"                  not-null="true"                  length="30"/>    </class>    </hibernate-mapping>


jdbc.properties内容如下:

datasource.type = mysqldatasource.driverClassName = com.mysql.jdbc.Driverdatasource.url = jdbc:mysql://localhost: 3306 /test?useUnicode = true&characterEncoding = UTF- 8datasource.username = rootdatasource.password = 123456datasource.maxActive = 10datasource.maxIdle = 2datasource.maxWait = 120000datasource.whenExhaustedAction = 1datasource.validationQuery = select  1  from dualdatasource.testOnBorrow = truedatasource.testOnReturn = falsec3p0.acquireIncrement = 3c3p0.initialPoolSize = 3c3p0.idleConnectionTestPeriod = 900c3p0.minPoolSize = 2c3p0.maxPoolSize = 50c3p0.maxStatements = 100c3p0.numHelperThreads = 10c3p0.maxIdleTime = 600hibernate.dialect = org.hibernate.dialect.MySQLInnoDBDialect#hibernate.dialect = org.hibernate.dialect.MySQLMyISAMDialecthibernate.jdbc.batch_size = 25hibernate.jdbc.fetch_size = 50hibernate.show_sql = truehibernate.connection.release_mode = after_transaction


3) Spirng部分:为了清晰把Spring的配置文件拆分成以下几部分applicationContext-dao.xml、appliationContext-service.xml、applicationContext-hibernate.xml、action-servlet.xml。
applicationContext-hibernate.xml内容:

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd"><beans><bean id="propertyConfigurer"    class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">    <property name="locations">        <list>            <!--  <value>WEB-INF/mail.properties</value>-->            <value>WEB-INF/jdbc.properties</value>            <!--  <value>WEB-INF/oscache.properties</value>-->        </list>    </property></bean><!-- MailSender used by EmailAdvice --><!--    <bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">    <property name="host" value="${mail.host}"/>    </bean>--><bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"    destroy-method="close" dependency-check="none">    <property name="driverClass">        <value>${datasource.driverClassName}</value>    </property>    <property name="jdbcUrl">        <value>${datasource.url}</value>    </property>    <property name="user">        <value>${datasource.username}</value>    </property>    <property name="password">        <value>${datasource.password}</value>    </property>    <property name="acquireIncrement">        <value>${c3p0.acquireIncrement}</value>    </property>    <property name="initialPoolSize">        <value>${c3p0.initialPoolSize}</value>    </property>    <property name="minPoolSize">        <value>${c3p0.minPoolSize}</value>    </property>    <property name="maxPoolSize">        <value>${c3p0.maxPoolSize}</value>    </property>    <property name="maxIdleTime">        <value>${c3p0.maxIdleTime}</value>    </property>    <property name="idleConnectionTestPeriod">        <value>${c3p0.idleConnectionTestPeriod}</value>    </property>    <property name="maxStatements">        <value>${c3p0.maxStatements}</value>    </property>    <property name="numHelperThreads">        <value>${c3p0.numHelperThreads}</value>    </property></bean><bean id="sessionFactory"    class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">    <property name="dataSource">        <ref local="dataSource" />    </property>    <property name="mappingResources">        <list>            <value>com/firstssh/model/User.hbm.xml</value>        </list>    </property>    <property name="hibernateProperties">        <props>            <prop key="hibernate.dialect">${hibernate.dialect}</prop>            <prop key="hibernate.show_sql">${hibernate.show_sql}</prop>            <prop key="hibernate.jdbc.fetch_size">                ${hibernate.jdbc.fetch_size}            </prop>            <prop key="hibernate.jdbc.batch_size">                ${hibernate.jdbc.batch_size}            </prop>        </props>    </property></bean><!-- 配置事务管理器bean,使用HibernateTransactionManager事务管理器 --><bean id="transactionManager"    class="org.springframework.orm.hibernate3.HibernateTransactionManager">        <!-- 为事务管理器注入sessionFactory" -->        <property name="sessionFactory" ref="sessionFactory"/></bean><!-- 配置事务拦截器Bean --><bean id="transactionInterceptor"    class="org.springframework.transaction.interceptor.TransactionInterceptor">    <!-- 为事务拦截器bean注入一个事物管理器 -->    <property name="transactionManager" ref="transactionManager"></property>    <property name="transactionAttributes">    <!-- 定义事务传播属性 -->        <props>                <prop key="insert*">PROPAGATION_REQUIRED</prop>                <prop key="update*">PROPAGATION_REQUIRED</prop>                <prop key="save*">PROPAGATION_REQUIRED</prop>                <prop key="add*">PROPAGATION_REQUIRED</prop>                <prop key="remove*">PROPAGATION_REQUIRED</prop>                <prop key="delete*">PROPAGATION_REQUIRED</prop>                <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>                <prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>                <prop key="load*">PROPAGATION_REQUIRED,readOnly</prop>                <prop key="change*">PROPAGATION_REQUIRED</prop>                <prop key="*">PROPAGATION_REQUIRED,readOnly</prop>        </props>    </property></bean><!-- 定义BeanNameAutoProxyCreator --><bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">    <!-- 指定满足哪些bean自动生成业务代理 -->    <property name="beanNames">    <!-- 需要自动创建事务代理的bean -->        <list>            <value>userService</value>        </list>        <!-- 其它需要自动创建事务代理的bean -->    </property>    <property name="interceptorNames">        <list>            <value>transactionInterceptor</value>            <!-- 可增加其它的interceptor -->        </list>    </property></bean></beans>

applicationContext-dao.xml内容:

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd"><beans><!-- 根DAO --><bean id="genericDao" class="com.firstssh.common.dao.GenericDao">    <property name="sessionFactory">        <ref bean="sessionFactory" />    </property></bean><bean id="userDao" class="com.firstssh.dao.impl.UserDao" parent="genericDao" /></beans>


applicationContext-service.xml内容:

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd"><beans><bean id="userService" class="com.firstssh.service.impl.UserService">    <property name="userDao">        <ref bean="userDao"/>    </property></bean><bean id="validateName" class="com.firstssh.common.Bean.ValidateName">    <property name="userService">        <ref local="userService"/>    </property></bean></beans>


action-servlet.xml内容:

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd"><beans>    <bean id="LoginAction" class="com.firstssh.action.LoginAction"        scope="prototype">        <property name="userService" ref="userService" />    </bean>    <bean id="RegistAction" class="com.firstssh.action.RegistAction"        scope="prototype">        <property name="userService" ref="userService" />    </bean></beans>


以上几个xml文件的内容暂且不要理会,继续往下看,你就自动明白的,不用我解释。
4)日志部分:log4j.properties 、commons-logging.properties
log4j.properties内容:

# For JBoss: Avoid to setup Log4J outside $JBOSS_HOME/server/default/deploy/log4j.xml!# For all other servers: Comment out the Log4J listener in web.xml to activate Log4J.log4j.rootLogger=INFO, stdout, logfilelog4j.appender.stdout=org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.layout=org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%nlog4j.appender.logfile=org.apache.log4j.RollingFileAppenderlog4j.appender.logfile.File=${firstssh.root}/WEB-INF/logs/firstssh.loglog4j.appender.logfile.MaxFileSize=512KB# Keep three backup files.log4j.appender.logfile.MaxBackupIndex=3# Pattern to output: date priority [category] - messagelog4j.appender.logfile.layout=org.apache.log4j.PatternLayoutlog4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n# OpenSymphony Stufflog4j.logger.com.opensymphony=INFOlog4j.logger.org.apache.struts2=INFO# Spring Stufflog4j.logger.org.springframework=INFO# Hibernate Stufflog4j.logger.org.hiberante=INFO

commons-logging.properties
内容:

org.apache.commons.logging.Log = org.apache.commons.logging.impl.Log4JLogger


5)web.xml

<?xml version="1.0" encoding="UTF-8"?><web-app xmlns="http://java.sun.com/xml/ns/j2ee"  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"  version="2.4"> <display-name>firstssh</display-name> <description>this is a simple example</description> <context-param>  <param-name>webAppRootKey</param-name>  <param-value>firstssh.root</param-value> </context-param>  <context-param>  <param-name>contextConfigLocation</param-name>  <param-value>/WEB-INF/applicationContext-*.xml,/WEB-INF/action-servlet.xml</param-value> </context-param> <context-param>  <param-name>log4jConfigLocation</param-name>  <param-value>/WEB-INF/log4j.properties</param-value> </context-param> <listener>  <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class> </listener> <!-- 用于初始化Spring容器的Listener -->    <listener>        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>    </listener>   <!-- 定义整合SiteMesh必须的ActionContextCleanUp Filter  <filter>  <filter-name>struts-cleanup</filter-name>  <filter-class>org.apache.struts2.dispatcher.ActionContextCleanUp</filter-class> </filter>--> <!-- 定义Struts2的FilterDispathcer的Filter -->    <filter>        <filter-name>struts2</filter-name>        <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>    </filter>   <!--   <filter-mapping>        <filter-name>struts-cleanup</filter-name>        <url-pattern>/*</url-pattern>    </filter-mapping>--> <!-- FilterDispatcher用来初始化struts2并且处理所有的WEB请求。 -->    <filter-mapping>        <filter-name>struts2</filter-name>        <url-pattern>/*</url-pattern>    </filter-mapping>       <!-- 这是一个产生验证码的servlet -->    <servlet>        <servlet-name>img</servlet-name>        <servlet-class>com.firstssh.servlet.AuthImg</servlet-class>    </servlet>      <servlet-mapping>        <servlet-name>img</servlet-name>     <url-pattern>/authImg</url-pattern>    </servlet-mapping>    <filter>           <filter-name>encodingFilter</filter-name>           <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>           <init-param>               <param-name>encoding</param-name>               <param-value>utf-8</param-value>           </init-param>       </filter>       <filter-mapping>           <filter-name>encodingFilter</filter-name>           <url-pattern>*.action</url-pattern>       </filter-mapping>       <filter-mapping>           <filter-name>encodingFilter</filter-name>           <url-pattern>*.jsp</url-pattern>       </filter-mapping>    <filter>           <filter-name>hibernateFilter</filter-name>           <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>       </filter>     <filter-mapping>           <filter-name>hibernateFilter</filter-name>           <url-pattern>*.action</url-pattern>       </filter-mapping>         <!-- DWR Servlet-->  <servlet>    <servlet-name>dwr-invoker</servlet-name>    <servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>    <init-param>      <param-name>debug</param-name>      <param-value>true</param-value>    </init-param>  </servlet>  <servlet-mapping>    <servlet-name>dwr-invoker</servlet-name>    <url-pattern>/dwr/*</url-pattern>  </servlet-mapping>      <session-config>           <session-timeout>10</session-timeout>       </session-config>       <welcome-file-list>    <welcome-file>index.jsp</welcome-file>  </welcome-file-list>  <error-page>    <error-code>401</error-code>    <location>/401.htm</location>  </error-page>  <error-page>    <error-code>403</error-code>    <location>/403.htm</location>  </error-page>  <error-page>    <error-code>404</error-code>    <location>/404.htm</location>  </error-page>  <error-page>    <error-code>500</error-code>    <location>/500.htm</location>  </error-page></web-app>

 

6)dwr.xml

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN" "http://getahead.org/dwr/dwr20.dtd"><dwr>    <!-- 检查用户名是否存在 ValidateName的映射文件-->    <allow>      <create  creator="spring" javascript="ValidateName" >          <param name="beanName" value="validateName"/>          <include method="valid"/>      </create>     </allow></dwr>

三、 开始编码:
以下是DAO部分的核心代码:
IGenericDao.java内容如下:

/**  * * @author <a href="mailto:flustar2008@163.com">flustar</a> * @version 1.0  * Creation date: Dec 23, 2007 6:19:21 PM */ package com.firstssh.common.dao; import java.io.Serializable; import java.util.Collection; import java.util.List; import org.hibernate.LockMode; import org.hibernate.criterion.DetachedCriteria; import org.springframework.dao.DataAccessException; import com.firstssh.common.util.PaginationSupport; public interface IGenericDao <T, ID extends Serializable> { public T load(ID id) throws DataAccessException; public T get(ID id)throws DataAccessException; public boolean contains(T t) throws DataAccessException; public void refresh(T t, LockMode lockMode) throws DataAccessException; public void refresh(T t) throws DataAccessException; public Serializable save(T t) throws DataAccessException; public void saveOrUpdate(T t) throws DataAccessException; public void saveOrUpdateAll(Collection<T> entities) throws DataAccessException; public void update(T t, LockMode lockMode) throws DataAccessException; public void update(T t) throws DataAccessException; public void delete(T t, LockMode lockMode) throws DataAccessException; public void delete(T t) throws DataAccessException; public void deleteAll(Collection<T> entities) throws DataAccessException; public List<T> find(String queryString, Object value) throws DataAccessException; public List<T> find(String queryString, Object[] values) throws DataAccessException; public List<T> find(String queryString) throws DataAccessException; public List<T> list()throws DataAccessException;  public List<T> findByNamedQuery(String queryName)throws DataAccessException ;  public List<T> findByNamedQuery(String queryName, Object value)throws DataAccessException ;  public List<T> findByNamedQuery(String queryName, Object[] values)throws DataAccessException ;  public PaginationSupport findPageByCriteria( final DetachedCriteria detachedCriteria, final int pageSize, final int startIndex); public PaginationSupport findPageByQuery(final String hql, final String countHql, final int pageSize, final int startIndex);}


GenericDao.java内容如下:

 /**  * * @author <a href="mailto:flustar2008@163.com">flustar</a> * @version 1.0  * Creation date: Dec 23, 2007 11:23:56 PM */ package com.firstssh.common.dao; import java.io.Serializable; import java.lang.reflect.ParameterizedType; import java.sql.SQLException; import java.util.Collection; import java.util.List; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.hibernate.Criteria; import org.hibernate.HibernateException; import org.hibernate.LockMode; import org.hibernate.Query; import org.hibernate.Session; import org.hibernate.criterion.DetachedCriteria; import org.hibernate.criterion.Projections; import org.springframework.dao.DataAccessException; import org.springframework.orm.hibernate3.HibernateCallback; import org.springframework.orm.hibernate3.support.HibernateDaoSupport; import com.firstssh.common.util.PaginationSupport;@SuppressWarnings( " unchecked " ) public class GenericDao <T, ID extends Serializable> extends HibernateDaoSupport implements IGenericDao <T, ID> ]; logger.debug("T class=" + entityClass.getName()); } return entityClass; } public void saveOrUpdate(T t) throws DataAccessException { this.getHibernateTemplate().saveOrUpdate(t); } public T load(ID id) throws DataAccessException { T load=(T) getHibernateTemplate().load(getEntityClass(), id); return load; } public T get(ID id) throws DataAccessException { T load=(T) getHibernateTemplate().get(getEntityClass(), id); return load; } public boolean contains(T t) throws DataAccessException { return getHibernateTemplate().contains(t); } public void delete(T t, LockMode lockMode) throws DataAccessException { getHibernateTemplate().delete(t, lockMode); } public void delete(T t) throws DataAccessException { getHibernateTemplate().delete(t); } public void deleteAll(Collection<T> entities) throws DataAccessException { getHibernateTemplate().deleteAll(entities); } public List<T> find(String queryString, Object value) throws DataAccessException { List<T> find=(List<T>) getHibernateTemplate() .find(queryString, value); return find; } public List<T> find(String queryString, Object[] values) throws DataAccessException { List<T> find=(List<T>) getHibernateTemplate().find(queryString, values); return find; } public List<T> find(String queryString) throws DataAccessException { return (List<T>) getHibernateTemplate().find(queryString); } public void refresh(T t, LockMode lockMode) throws DataAccessException { getHibernateTemplate().refresh(t, lockMode); } public void refresh(T t) throws DataAccessException { getHibernateTemplate().refresh(t); } public Serializable save(T t) throws DataAccessException { return getHibernateTemplate().save(t); } public void saveOrUpdateAll(Collection<T> entities) throws DataAccessException { getHibernateTemplate().saveOrUpdateAll(entities); } public void update(T t, LockMode lockMode) throws DataAccessException { getHibernateTemplate().update(t, lockMode); } public void update(T t) throws DataAccessException { getHibernateTemplate().update(t); } public List<T> list() throws DataAccessException { return getHibernateTemplate().loadAll(getEntityClass()); } public List<T> findByNamedQuery(String queryName) throws DataAccessException { return getHibernateTemplate().findByNamedQuery(queryName); } public List<T> findByNamedQuery(String queryName, Object value) throws DataAccessException { return getHibernateTemplate().findByNamedQuery(queryName, value); } public List<T> findByNamedQuery(String queryName, Object[] values) throws DataAccessException { return getHibernateTemplate().findByNamedQuery(queryName, values); } public PaginationSupport findPageByCriteria( final DetachedCriteria detachedCriteria, final int pageSize, final int startIndex) { return (PaginationSupport) getHibernateTemplate().execute( new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException { Criteria criteria=detachedCriteria .getExecutableCriteria(session); int totalCount=((Integer) criteria.setProjection( Projections.rowCount()).uniqueResult()) .intValue(); criteria.setProjection(null); List items=criteria.setFirstResult(startIndex) .setMaxResults(pageSize).list(); PaginationSupport ps=new PaginationSupport(items, totalCount, pageSize, startIndex); return ps; } }, true); } public PaginationSupport findPageByQuery( final String hql, final String countHql,final int pageSize,final int startIndex){  return (PaginationSupport)getHibernateTemplate().execute(  new HibernateCallback() {  public Object doInHibernate(Session session) throws HibernateException, SQLException {  int totalCount=((Integer)session.createQuery(countHql).iterate().next()).intValue();  Query query= session.createQuery(hql); query.setFirstResult(startIndex);  query.setMaxResults(pageSize);  List items=query.list(); PaginationSupport ps=new PaginationSupport(items, totalCount, pageSize, startIndex); return ps;  }  },true);  }}


呵呵,使用了泛型,以后每建立一个Dao都要建立相应的dao接口和实现类,如本例中的IUserDao和UserDao。

/**  * * @author <a href="mailto:flustar2008@163.com">flustar</a> * @version 1.0  * Creation date: Dec 24, 2007 12:47:57 AM */package com.firstssh.dao;import java.util.List;import com.firstssh.common.dao.IGenericDao;import com.firstssh.model.User;public interface IUserDao extends IGenericDao<User, Integer> {        public User getUserByName(String username);    public List<User> findAllUser();    public User findUserByNameAndPass(String username, String password);} 
/**  * * @author <a href="mailto:flustar2008@163.com">flustar</a> * @version 1.0  * Creation date: Dec 24, 2007 12:38:48 AM */package com.firstssh.dao.impl;import java.util.List;import com.firstssh.common.dao.GenericDao;import com.firstssh.dao.IUserDao;import com.firstssh.model.User;public class UserDao extends GenericDao<User,Integer> implements IUserDao{    public List<User> findAllUser() {                return (List<User>)find("from User");    }    public User findUserByNameAndPass(String username, String password) {        Object[] params=new Object[]{username,password};        List<User> userList=find("from User as user where user.username=? and user.password=? ",params);        if(userList!=null&&userList.size()>=1){            return userList.get(0);        }        return null;    }    public User getUserByName(String username) {        List<User> userList=find("from User as user where user.username=?",username);        if(userList!=null&&userList.size()>=1){            return userList.get(0);        }        return null;    }}


还有好多文件的代码没有贴出来,我实在不忍心再复制、粘贴下去了(浪费大家那么多时间),有兴趣的可以下载这个例子的源代码(由于这个例子牵涉的jar包比较大我就不把它们放进去了),我想以上这些文件的内容我就不用解释了,因为大家都学过SSH。本人初次整合它们,并没有使用这个整合方案做过项目,一定还有某些方面考虑的还不是太成熟,哪位大侠看了,还请多多批评指正,也希望谁有更好的整合方案,也共享一下,大家共同进步,共同提高!~^_^

12 2