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

原创整理不易,转载请注明出处: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 = false
struts.enable.DynamicMethodInvocation = true
struts.i18n.reload = true
struts.ui.theme =xhtml

struts.locale = zh_CN
struts.i18n.encoding = UTF- 8
struts.objectFactory = spring
struts.objectFactory.spring.autoWire = name

struts.serve.static.browserCache = false
struts.url.includeParams = none

2) 建立User.java和User.hbm.xml、jdbc.properties:

User.java内容如下:

/**
 *
 * @author <a href="mailto:[email protected]">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 = mysql
datasource.driverClassName = com.mysql.jdbc.Driver
datasource.url = jdbc:mysql://localhost: 3306 /test?useUnicode = true&characterEncoding = UTF- 8

datasource.username = root
datasource.password = 123456

datasource.maxActive = 10
datasource.maxIdle = 2
datasource.maxWait = 120000
datasource.whenExhaustedAction = 1
datasource.validationQuery = select  1  from dual
datasource.testOnBorrow = true
datasource.testOnReturn = false

c3p0.acquireIncrement = 3
c3p0.initialPoolSize = 3
c3p0.idleConnectionTestPeriod = 900
c3p0.minPoolSize = 2
c3p0.maxPoolSize = 50
c3p0.maxStatements = 100
c3p0.numHelperThreads = 10
c3p0.maxIdleTime = 600

hibernate.dialect = org.hibernate.dialect.MySQLInnoDBDialect
#hibernate.dialect = org.hibernate.dialect.MySQLMyISAMDialect

hibernate.jdbc.batch_size = 25
hibernate.jdbc.fetch_size = 50
hibernate.show_sql = true
hibernate.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, logfile

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n

log4j.appender.logfile=org.apache.log4j.RollingFileAppender
log4j.appender.logfile.File=${firstssh.root}/WEB-INF/logs/firstssh.log
log4j.appender.logfile.MaxFileSize=512KB
# Keep three backup files.
log4j.appender.logfile.MaxBackupIndex=3
# Pattern to output: date priority [category] - message
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n
# OpenSymphony Stuff
log4j.logger.com.opensymphony=INFO
log4j.logger.org.apache.struts2=INFO
# Spring Stuff
log4j.logger.org.springframework=INFO
# Hibernate Stuff
log4j.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:[email protected]">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:[email protected]">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:[email protected]">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:[email protected]">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。本人初次整合它们,并没有使用这个整合方案做过项目,一定还有某些方面考虑的还不是太成熟,哪位大侠看了,还请多多批评指正,也希望谁有更好的整合方案,也共享一下,大家共同进步,共同提高!~^_^

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

时间: 2024-10-24 21:49:46

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

Myeclipse10下搭建SSH框架(图解)Struts2.1+Spring3.0+Hibernate3.3 (转)

出处:http://xly3000.blog.163.com/blog/static/1324247201231163828803/ 一.建立一个Web Project ①点击File→New→Web Project 新建一个Web工程.   ②在Project Name中输入项目名ssh,在J2EE Specification Level中选择Java EE 6.0,然后点击Finish.  二.搭建Spring3.0 ①左边显示的是生成以后的Web Project 目录结构. 选择工程名(s

SSh框架搭建(Struts2.1+Hibernate4.0+Spring3.1)

一.使用工具 开发工具:My Eclipse 10.7以及相应的java开发工具 框架版本:Struts2.1+Hibernate3+Spring3.0 数据库:MySql5.5 Mysql可视化工具:Navicat 11 所需软件的下载地址:Navicat 11:http://pan.baidu.com/s/1nthrWtb                                MyEclipse:http://www.xpgod.com/soft/7498.html         

SSH框架搭建 详细图文教程

转载请标明原文地址 一.什么是SSH? SSH是JavaEE中三种框架(Struts+Spring+Hibernate)的集成框架,是目前比较流行的一种Java Web开源框架. SSH主要用于Java Web的开发.现在SSH有SSH1和SSH2两种,区别在于Struts的版本是struts1.x还是2.x.本文介绍的是SSH1. 二.Struts Spring Hibernate各起什么作用? Struts:控制逻辑关系. Spring:解耦. Hibernate:操作数据库. 三.学习SS

eclipse中SSH框架搭建和项目开发基本步骤

1.下载SSH框架代码和eclipse插件,地址:http://yunpan.cn/QTCrdHF4xkEVp (提取码:0e8d) 注意,一定要分清楚,SSH框架是要导入到自己的工程项目中的包,这些包是要在项目中调用的预先开发好的java文件:而eclipse插件是在eclipse环境下开发SSH相关项目是方便用户建立项目管理项目的工具,跟项目本身的文件和功能无关.一定要分清楚这两个概念. 2,下载完成之后,解压,会发现有5个文件夹,第一步要用到的是spring plugins for ecl

SSH框架搭建过程

什么是SSH? SSH对应 struts spring hibernate struts 采用MVC模式,主要是作用于用户交互 spring 采用IOC和AOP~作用比较抽象,是用于项目的松耦合 hibernate 是对象持久化框架,其实就是实体类和数据库表建立关系,操作类就会触发相应的sql语句,可以不用写任何sql语句,完成数据库编程(引自百度知道) SSH就是Struts + Spring + Hibernate 3个Java框架的集合,现在Java开发中常用的框架组合.用来开发后台,与前

springMVC+Hibernate3+spring3整合实例,附带基本权限功能及CURD例子

实例说明: 1.本实例的架子是在2012年为了真实项目的开发搭建的,目前已经在此架子上做了几个中小项目.分为两个不同的版本,一个是Hibernate版本,一个是ibatis版本. 2.本实例是一个SSH的完整的架子,包括了基本的权限管理及CURD的例子.权限管理包括用户管理,菜单管理,角色管理,权限分配等.CURD的例子包括了基本的CURD以及分页功能,可以做为代码复制的例子,只专为新手学习编写的. 3..在本实例的架子上已经开发了几个中小项目,系统技术架构为springMVC+Hibernat

SSH框架搭建

闲来无事,来搞下SSH框架的搭建吧. 1.struts搭建 这个不用说了吧,新建一个web项目,把struts-2.3.7-all解压后的struts2-blank里面的lib下面的包全部复制到你新建的web项目里面,把web-inf下面的web.xml复制过去,把src目录下的struts.xml复制到新建的src目录下.最重要的是你要集成spring,那么问题来了,你少包了,亲.去struts-2.3.7-all文件夹的lib目录下把struts2-spring-plugin-2.3.7包拷

Struts2.1.6+Spring2.0+Hibernate3.1整合图解教程(ssh223)

在网上搜索了很多ssh223的配置文章,但有的开发环境不同,版本也不同,下面是我做的ssh223的开发配置教程,以供参考(因为是很久很久以前写的,因此环境有些古老,有用得到朋友根据实际情况来就OK) 开发环境:MyEclipse5.5+Tomcat6.0+MySql5.1 配置环境:Struts2.1.6+Spring2.0+Hibernate3.1 第一步:创建Java-Web Project工程,选择J2EE 5.0版本 下一步 下一步 第二步:配置spring2.0 1.添加jar包 如图

Myeclipse——SSH框架搭建

Struts2.x+Spring3.x+Hibernate3.x 一.首先建立一个Web 工程 二.搭建Struts 右键工程,选择MyEclipse->Add Struts Capabilities 弹出Struts设置对话框,选择Struts 2.1 下一步 完成设置,src目录下会出现Struts.xml, 三.搭建Spring 右键工程,选择MyEclipse->Add Spring Capabilities 选择包如下5个包 注:如果想要部署时也把Spring Jar包一起打包的话,