一:整体架构
二:pom.xml:
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.3</version>
<scope>test</scope>
</dependency>
<!--spring配置-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.2.0.RELEASE</version>
</dependency>
<!--aop使用的jar-->
<dependency>
<groupId> org.aspectj</groupId >
<artifactId> aspectjweaver</artifactId >
<version> 1.8.7</version >
</dependency>
<!--SpringWeb-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>4.1.8.RELEASE</version>
</dependency>
<!--JavaEE-->
<dependency>
<groupId>javaee</groupId>
<artifactId>javaee-api</artifactId>
<version>5</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>4.2.5.RELEASE</version>
</dependency>
<!--c3p0-->
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.5.2</version>
</dependency>
<!--hibernate jar包-->
<!--jta的jar包-->
<dependency>
<groupId>javax.transaction</groupId>
<artifactId>jta</artifactId>
<version>1.1</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.0.6.Final</version>
</dependency>
<!--Spring-ORM-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version> 4.2.2.RELEASE</version>
</dependency>
<!--Oracle驱动的jar-->
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc6</artifactId>
<version>11.2.0.1.0</version>
</dependency>
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>2.3.4.1</version>
</dependency>
<dependency>
<groupId>org.apache.struts.xwork</groupId>
<artifactId>xwork-core</artifactId>
<version>2.3.4.1</version>
</dependency>
<!--Struts整合Spring的jar包-->
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-spring-plugin</artifactId>
<version>2.3.4.1</version>
</dependency>
<!--Struts2注解支持jar包-->
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-convention-plugin</artifactId>
<version>2.3.4.1</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.31</version>
</dependency>
三:Dept.class
public class Dept {
private Integer deptno;
private String deptname;
public Integer getDeptno() {
return deptno;
}
public void setDeptno(Integer deptno) {
this.deptno = deptno;
}
public String getDeptname() {
return deptname;
}
public void setDeptname(String deptname) {
this.deptname = deptname;
}
}
四:Dept.hbm.xml
<hibernate-mapping package="cn.happy.bean">
<class name="Dept" table="Dept" schema="happyy2165">
<id name="deptno" column="deptno">
<generator class="native"></generator>
</id>
<property name="deptname" />
</class>
</hibernate-mapping>
五:IDeptDAO
public interface IDeptDAO {
public void addDept(Dept dept);
}
六:DeptDAOImpl
public class DeptDAOImpl implements IDeptDAO {
private SessionFactory sessionFactory;
public void addDept(Dept dept) {
Session session = sessionFactory.getCurrentSession();
session.save(dept);
}
public SessionFactory getSessionFactory() {
return sessionFactory;
}
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
}
七:IDeptService:
public interface IDeptService {
public void addDept(Dept dept);
}
八:DeptServiceImpl
public class DeptServiceImpl implements IDeptService{
private IDeptDAO deptDAO;
@Transactional
public void addDept(Dept dept) {
deptDAO.addDept(dept);
}
public IDeptDAO getDeptDAO() {
return deptDAO;
}
public void setDeptDAO(IDeptDAO deptDAO) {
this.deptDAO = deptDAO;
}
}
九:DeptAction
public class DeptAction extends ActionSupport { private Dept dept; private IDeptService deptService; public String add() { System.out.println(dept); deptService.addDept(dept); return SUCCESS; } public Dept getDept() { return dept; } public void setDept(Dept dept) { this.dept = dept; } public IDeptService getDeptService() { return deptService; } public void setDeptService(IDeptService deptService) { this.deptService = deptService; } }
十:applicationContext.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
">
<!--1.配置数据源c3p0-->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="com.mysql.jdbc.Driver"></property>
<property name="jdbcUrl" value="jdbc:mysql://localhost/other?characterEncoding=gb2312"></property>
<property name="user" value="sa"></property>
<property name="password" value="ljl19980427"></property>
</bean>
<!--2.SessionFactory 类:Local-->
<bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<property name="hibernateProperties">
<props>
<!--hibernate.xxxxxx必须以hibernate-->
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.format_sql">true</prop>
<prop key="hibernate.dialect"> org.hibernate.dialect.MySQL5Dialect</prop>
<!--with current thread bind session和线程绑定的session-->
<prop key="hibernate.current_session_context_class">org.springframework.orm.hibernate5.SpringSessionContext</prop>
</props>
</property>
<!--扫描小配置文件 所有的hbm文件-->
<property name="mappingDirectoryLocations" value="classpath:cn/happy/bean"></property>
</bean>
<!--3.dao-->
<bean id="deptDAO" class="cn.happy.dao.DeptDAOImpl">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<!--4.service-->
<bean id="deptService" class="cn.happy.service.DeptServiceImpl">
<property name="deptDAO" ref="deptDAO"></property>
</bean>
<!--要用Spring去创建Action对象 Struts2的Action是多例的-->
<bean id="deptAction" class="cn.happy.action.DeptAction" scope="prototype">
<property name="deptService" ref="deptService"></property>
</bean>
<!-- 6.事务管理器-->
<bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<!--7.事务-->
<tx:annotation-driven transaction-manager="transactionManager"></tx:annotation-driven>
<!-- <tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="add*" isolation="DEFAULT" propagation="REQUIRED"/>
</tx:attributes>
</tx:advice>
<aop:config>
<!–配置了切点Pointcut–>
<aop:pointcut id="mypoint" expression="execution(* *..service.*.*(..))"/>
<!– 顾问–>
<aop:advisor advice-ref="txAdvice" pointcut-ref="mypoint"></aop:advisor>
</aop:config>-->
</beans>
十一:add.jsp
<html>
<head>
<title>添加部门</title>
</head>
<body>
<form method="post" action="/add">
部门名称: <input name="dept.deptname"/>
<input type="submit" value="添加"/>
</form>
</body>
</html>
十二:web.xml
<web-app>
<display-name>Archetype Created Web Application</display-name>
<!--有点东西-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<filter>
<filter-name>struts</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!--1.监听器-->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<welcome-file-list>
<welcome-file>/jsp/add.jsp</welcome-file>
</welcome-file-list>
</web-app>