ssh框架搭建Struts2.06+spring2.5+hibernate3.2整合例項程式碼教程步驟
最近閒來無事可做,於是開始學習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整合例項程式碼教程步驟
最近閒來無事可做,於是開始學習struts2。Struts2和struts1、webwork2有什麼區別我也不說了,網上有很多這方面的資料。以前在專案中從未使用過struts,一直使用spring+hibernate,現在既然學習了Struts,也不能浪費,於是乎開始琢
Apache Shiro+SpringMVC+Hibernate Search+Hibernate+Bootstrap企業資訊管理系統基礎框架搭建整合例項程式碼教程
轉載:http://www.zuidaima.com/share/1764524204903424.htm 問題1:非常非常非常抱歉!!以為我的疏忽導致static目錄沒放進原來的專案!!浪費大家精力調bug。。。實在很對不起,現在重新上傳!!希望有問題的同學可以私信我或者Q群私聊(我不是很常上qq,但願發
eclipse環境搭建ssh(Struts2+Spring2.5+Hibernate3)框架小談(下)
不過,我一定會用心的編輯每一篇文章,一方面便於自己回顧,另一方便也希望能夠幫到需要的小夥伴。 ※1、ssh框架如何實現一個功能,(思考:頁面上提交的資料到底怎麼去的資料庫 然後又回到頁面重新顯示的呢,我到底應該做些什麼來實現它) (以下使用“註冊”功能來詳細講解) V
struts2+spring3+hibernate3組合的SSH框架搭建
一、配置 myeclipse 連結資料庫 1.1 選擇 myeclipse 的資料庫檢視 1.2 新建 DB 連結 選擇new 再輸入一次密碼 成功顯示如下: 點選
SSH框架程式碼(struts1.2+spring2.0+hibernate3.2)第一部分
需要的jar包: struts1.2.9所有jar包; hibernate3.2所有jar包(注意加入hibernate3.jar還有mysql驅動); spring2.0的/dist/spring.jar,/lib/aspectj/下兩個jar,/lib/jakarta-
最簡單的ssh框架搭建:spring4+struts2+hibernate5。使用部分註解(常用的幾個註解)
前一篇寫了沒有使用註解的方式:https://blog.csdn.net/Handsome2013/article/details/86301083 這一篇是有部分需要使用註解:這個是在上一篇的基礎上寫的。 改變1:在dao層的SSHDaoImpl.java上添加了註釋@Repository
在eclipse上邊搭建一個最最最最最最最最最最最最最最最最最最最最最最最最簡單的ssh框架spring4+struts2+hibernate5,然後實現從資料庫中查詢一個數據,在前端頁面中顯示出來
在eclipse上邊搭建一個最最最簡單的ssh框架spring4+struts2+hibernate5,然後實現從資料庫中查詢一個數據,在前端頁面中顯示出來 需要的包和工具連結如下: jar包:https://download.csdn.net/download/hands
SSH框架搭建例項--Spring4+Struts2+Hibernate4搭建
SSH框架的搭建 一 Spring容器裡我們通過IOC依賴注入的方式把Hibernate和Struts的各個元件都交給Spring容器去建立和管理。以及事物管理等 這裡給出的步驟不是具體的搭建步驟(按照原理搭建的步驟),只是給出了一個完整SSH框架的所有程式碼包括配置檔案
2016傳智SSH框架CRM項目(5天)筆記(2017年5月20日22:09:36)
images 項目 是把 ima 技術分享 易錯點 font log ont 5天視頻,摘取了其中的一些筆記。筆記記得有點簡略,但是把項目中的易錯點都寫出來了。 筆記鏈接如下 鏈接:http://pan.baidu.com/s/1geQ9Tn1 密碼:1eh82016傳智
SSH框架學習------struts2(一)
str struts2 oct 簡單 src package efi struts2配置 html 1.總的目錄 2.所有程序 1)index.jsp很簡單 <%@ page language="java" contentType="text/html; chars
SSH框架學習------struts2前後臺傳值(二)
sts put ret req extends imp tps str rri struts2的Action類一般都會繼承(extends)ActionSupport類(Action類,即實現action的類)1.前傳後:jsp裏<input type="text"
SSH框架搭建的時候遇到的問題
executor con ase read lan pac not inner man 1、spring-web.jar包問題:使用user libaries方式,識別不到,於是出現了下面問題 java.lang.ClassNotFoundException: org.s
ssh框架搭建出現的異常: class com.my.entity.user not found while looking for property: id
增長 native column while 一個 ava pre true not 在處理用戶註冊的時候,user實體的bean創建不出來,原代碼如下: <class name="com.my.entity.User" table="user">
Struts2.1.6+Spring2.0+Hibernate3.1整合圖解教程(ssh223)
不同 onf 第一步 RKE 版本 found http 地址 mysql- 在網上搜索了很多ssh223的配置文章,但有的開發環境不同,版本也不同,下面是我做的ssh223的開發配置教程,以供參考(因為是很久很久以前寫的,因此環境有些古老,有用得到朋友根據實際情況來就OK
ssh框架搭建
eas _for window exceptio url tomcat tle -m rec 1.搭建環境windows10+eclipse4.8+jdk1.8+maven 2.框架springMVC+spring+Hibernate 3.搭建步驟 1)首先創建maven項
SSH框架搭建教程
新建一個maven專案 開啟pom.xml檔案配置基礎依賴 <!-- 引用junit依賴 --> <dependency> <g
SSH框架搭建詳細步驟整理
學習Java面前有兩座山,一座山叫SSM,一座山叫SSH,跨越了這兩座山之後才能感受到這個語言的魅力所在,SSM框架的搭建詳細在之前部落格已經涉及了,今天來整理SSH框架詳細步驟; 生有涯 而 學無涯 搭建步驟有: 建立Web Project專案; 匯入jar包
測試ssh框架搭建時遇到hibernate無法連線資料庫
問題提示 log4j:WARN No appenders could be found for logger (org.jboss.logging). log4j:WARN Please initialize the log4j system properly. log
快速整合ssh框架搭建簡單demo
eclipse建立專案 File -> new ->Dynamic Web Project ->next ->next Generate web.xml deployment descriptor 打上勾,專案建立時會自動建立web.
SSH框架搭建 詳細圖文教程
轉載請標明原文地址 一、什麼是SSH? SSH是JavaEE中三種框架(Struts+Spring+Hibernate)的整合框架,是目前比較流行的一種Java Web開源框架。 SSH主要用於Java Web的開發。現在SSH有SSH1和SSH2兩種,區別在於Struts