需要的jar 包
(如果jar包有冲突,保留高级版本的,删除低级版本的)
spring + struts 2
配置 web.xml
<!-- Struts2的配置 -->
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
<!-- Spring的配置 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:config/spring.xml,classpath:config/springDao.xml</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
struts 2 的配置
<package name="default" namespace="/" extends="json-default">
<action name="registerPostAction" class="registerPostAction_">
<result name="input">/WEB-INF/pages/welcome.jsp</result>
<result name="success">/WEB-INF/pages/register.jsp</result>
</action>
</package>
struts 2 下的 class属性的值不再是Action类的全限定名,
而是Spring配置文件中相应的Action Bean的名称
spring + hibernate
hibernate 的配置
<session-factory>
<!-- 数据库链接配置 -->
<property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
<!-- 在控制台输出sql语句 -->
<property name="show_sql">true</property>
<!-- 格式化sql语句 -->
<property name="format_sql">true</property>
<!-- 数据库生成策略 -->
<property name="hibernate.hbm2ddl.auto">update</property>
</session-factory>
springDao 的配置
<!-- 配置c3p0连接池属性 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass" value="com.mysql.jdbc.Driver" />
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/vote" />
<property name="user" value="root" />
<property name="password" value="123456" />
<!-- 队列中的最小连接数 -->
<property name="minPoolSize" value="15"></property>
<!-- 队列中的最大连接数 -->
<property name="maxPoolSize" value="25"></property>
<!-- 当连接耗尽时创建的连接数 -->
<property name="acquireIncrement" value="15"></property>
<!-- 等待时间 -->
<property name="checkoutTimeout" value="10000"></property>
<!-- 初始化连接数 -->
<property name="initialPoolSize" value="20"></property>
<!-- 最大空闲时间,超出时间连接将被丢弃 -->
<property name="maxIdleTime" value="20"></property>
<!-- 每隔60秒检测空闲连接 -->
<property name="idleConnectionTestPeriod" value="60000"></property>
</bean>
<!-- session工厂由spring来管理 -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean" >
<!-- 加载数据源对象,spring的配置方式 -->
<property name="dataSource" ref="dataSource"/>
<!-- 读取hibernate配置信息,hibernate配置方式 -->
<property name="configLocation" value="classpath:config/hibernate.xml" />
<!-- 自动加载映射文件 *表示匹配该文件下的所有映射文件 -->
<property name="mappingLocations" value="classpath:com/znsd/vote/hibernate/entitys/mapping/*.hbm.xml" >
</property>
</bean>
<!-- 配置事务 -->
<bean id="txManager"
class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<!-- 事务的通知方式 -->
<tx:advice id="txAdvice" transaction-manager="txManager">
<tx:attributes>
<tx:method name="find*" propagation="REQUIRED" read-only="true" />
<tx:method name="search*" propagation="REQUIRED" read-only="true" />
<tx:method name="query*" propagation="REQUIRED" read-only="true" />
<tx:method name="add*" propagation="REQUIRED" />
<tx:method name="submit*" propagation="REQUIRED" />
<tx:method name="save*" propagation="REQUIRED" />
<tx:method name="insert*" propagation="REQUIRED" />
<tx:method name="del*" propagation="REQUIRED" />
<tx:method name="remove*" propagation="REQUIRED" />
<tx:method name="update*" propagation="REQUIRED" />
<tx:method name="modify*" propagation="REQUIRED" />
<tx:method name="*" propagation="REQUIRED" read-only="false" />
</tx:attributes>
</tx:advice>
<!-- AOP切面拦截事务,事务一定是加在业务层 -->
<aop:config>
<aop:pointcut id="serviceMethod"
expression="execution(* com.znsd.vote.service.*.*.*(..))" />
<aop:advisor advice-ref="txAdvice"
pointcut-ref="serviceMethod" />
</aop:config>
连接池有两种配置方案
在springDao文件中配置。
在hibernate.cfg.xml文件配置。
Spring可以简化Hibernate编码
public class BaseDaoImpl<T> extends HibernateDaoSupport implements BaseDao<T> {
//实现添加的方法
@Override
public Serializable save(T entity) {
return getHibernateTemplate().save(entity);
}
//实现删除的方法
@Override
public void delete(T entity) {
getHibernateTemplate().delete(entity);
}
//根据id来删除的方法
@Override
public void delete(Class<T> clazz, Serializable id) {
T t = (T) getHibernateTemplate().get(clazz, id);
getHibernateTemplate().delete(t);
}
//实现更新的方法
@Override
public void update(T entity) {
getHibernateTemplate().update(entity);
}
//根据id来获取对象
@Override
public T get(Class<T> clazz, Serializable id) {
return getHibernateTemplate().get(clazz, id);
}
//实现查询所有数据的方法
@Override
public List<T> findAll(Class<T> clazz) {
String hql = "from " + clazz.getName();
return (List<T>) this.getHibernateTemplate().find(hql, null);
}
//实现根据条件查询的方法
@Override
public List<T> findAll(Class<T> clazz, String where, Object[] paras) {
String hql = "from " + clazz.getName() + " where " + where;
return (List<T>) this.getHibernateTemplate().find(hql, paras);
}
}