原创整理不易,转载请注明出处: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: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 = 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: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。本人初次整合它们,并没有使用这个整合方案做过项目,一定还有某些方面考虑的还不是太成熟,哪位大侠看了,还请多多批评指正,也希望谁有更好的整合方案,也共享一下,大家共同进步,共同提高!~^_^