1编辑pom.xml
1.1加入第3方依赖包
<dependencies> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.0.1</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.6.8.RELEASE</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.14</version> </dependency> <dependency> <groupId>javassist</groupId> <artifactId>javassist</artifactId> <version>3.9.0</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.0.5</version> </dependency> <dependency> <groupId>cglib</groupId> <artifactId>cglib</artifactId> <version>2.2.2</version> </dependency>
1.2 加入struts2相关包
<dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-spring-plugin</artifactId> <version>2.3.4</version> </dependency> <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-core</artifactId> <version>2.3.4</version> </dependency>
1.3加入hibernate相关包
<dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-ehcache</artifactId> <version>4.2.0.Final</version> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-c3p0</artifactId> <version>4.2.0.Final</version> </dependency> <dependency> <groupId>org.hibernate.common</groupId> <artifactId>hibernate-commons-annotations</artifactId> <version>4.0.1.Final</version> </dependency>
1.4加入spring相关包
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>3.1.2.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>3.1.2.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> <version>3.1.2.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>3.1.2.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-asm</artifactId> <version>3.1.2.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>3.1.2.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>3.1.2.RELEASE</version> </dependency>
2.编辑web.xml
<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> <filter-name>hibernateOpenSessionInViewFilter</filter-name> <filter-class>org.springframework.orm.hibernate4.support.OpenSessionInViewFilter</filter-class> </filter> <filter> <filter-name>struts2</filter-name> <filter-class> org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter </filter-class> </filter> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <filter-mapping> <filter-name>hibernateOpenSessionInViewFilter</filter-name> <url-pattern>*.action</url-pattern> </filter-mapping> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>*.action</url-pattern> </filter-mapping> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <listener> <listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class> </listener>(编码,struts2过滤器,spring监听器,防止内存泄露过滤器,OpenSessionInViewFilter)
3.编辑application.xml
<!-- 使用annotation 自动注册bean,并保证@Required,@Autowired的属性被注入 --> <context:component-scan base-package="com.jjee" /> <!-- DataSource 详细参数可以参考个人知识管理的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://127.0.0.1:3306/jjee?characterEncoding=utf-8" /> <property name="user" value="root" /> <property name="password" value="" /> <property name="minPoolSize" value="10" /> <property name="initialPoolSize" value="10" /> <property name="maxPoolSize" value="100" /> <property name="maxIdleTime" value="1800" /> <property name="maxStatements" value="1000" /> <property name="idleConnectionTestPeriod" value="1800" /> </bean> <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="annotatedClasses"> <list> <value>com.jjee.entity.User</value> </list> </property> <!-- 详解见pkm java->hibername->Hibernate properties详解 --> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect"> org.hibernate.dialect.MySQLDialect </prop> <prop key="hibernate.show_sql">true</prop> <prop key="hibernate.format_sql">true</prop> </props> </property> </bean> <!-- 事务管理器配置,单数据源事务 --> <bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory" /> </bean> <tx:advice id="txAdvice"> <tx:attributes> <tx:method name="get*" read-only="true" /> <tx:method name="find*" read-only="true" /> <tx:method name="query*" read-only="true" /> <tx:method name="is*" read-only="true" /> <tx:method name="*" propagation="REQUIRED" rollback-for="Exception" /> </tx:attributes> </tx:advice> <aop:config proxy-target-class="true"> <aop:advisor pointcut="execution(* com.jjee.service..*Service.*(..))" advice-ref="txAdvice"></aop:advisor> </aop:config>*component-scan包扫描 *dataSource数据源 *sessionFactory *transactionManager事务管理 *tx:advice aop方式配置事务处理
4.配置struts.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd"> <struts> <constant name="struts.devMode" value="true" /> <package name="basicstruts2" extends="struts-default"> <action name="index" class="com.jjee.web.Action_"> <result name="success">/success.jsp</result> <result name="error">/error.jsp</result> </action> </package> </struts>顺便配置要测试的action
5.测试
5.1.保存数据
分3层的包
Action_.java
package com.jjee.web; import org.apache.log4j.Logger; import org.springframework.beans.factory.annotation.Autowired; import com.jjee.service.UserService; import com.opensymphony.xwork2.ActionSupport; public class Action_ extends ActionSupport { private static final Logger logger = Logger.getLogger(Action_.class); /* * (non-Javadoc) * * @see com.opensymphony.xwork2.ActionSupport#execute() */ @Autowired protected UserService userService; @Override public String execute() throws Exception { // TODO Auto-generated method stub\ try { if (userService.save()) { return "success"; } } catch (Exception e) { return "error"; } return "success"; } }
package com.jjee.service; import org.apache.log4j.Logger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.jjee.dao.BaseDao; import com.jjee.entity.User; import com.jjee.web.Action_; @Service public class UserService { private static final Logger logger = Logger.getLogger(Action_.class); @Autowired protected BaseDao baseDao; public boolean save() throws Exception { // TODO Auto-generated method stub logger.debug("debug==============="); User user = new User(); user.setName("这是用户名11111111111111"); baseDao.save(user); return true; } }
package com.jjee.dao; import java.io.Serializable; import java.util.List; import org.hibernate.Query; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.criterion.Example; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Repository; /** * * @ClassName:BaseDao * @Description:dao 基类,包括增删改查 * @author:gaoFeng * @date:2013-2-27 下午2:31:42 */ @Repository public class BaseDao extends ReadDao implements Serializable { @Autowired private SessionFactory sessionFactory; public Session getSession() { return sessionFactory.getCurrentSession(); } public <T> void save(T t) throws Exception { getSession().save(t); //throw new Exception("==================asdf"); }只贴上来保存数据的代码
User.java
package com.jjee.entity; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import static javax.persistence.GenerationType.IDENTITY; import javax.persistence.Id; import javax.persistence.Table; /** * User entity. @author MyEclipse Persistence Tools */ @Entity @Table(name = "user", catalog = "jjee") public class User implements java.io.Serializable { // Fields private Integer id; private String name; // Constructors /** default constructor */ public User() { } /** full constructor */ public User(String name) { this.name = name; } // Property accessors @Id @GeneratedValue(strategy = IDENTITY) @Column(name = "id", unique = true, nullable = false) public Integer getId() { return this.id; } public void setId(Integer id) { this.id = id; } @Column(name = "name", length = 10) public String getName() { return this.name; } public void setName(String name) { this.name = name; } }部署测试一下
5.2测试事务回滚
加上抛异常代码
页面测试
看数据表
看后台显示
ok测试成功
项目代码链接http://download.csdn.net/detail/zsstudio/5259903