1.所需pom.xml:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<parent>
<artifactId>Smbms-SpringMVC</artifactId>
<groupId>cn.jjz</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>cn.jjz</groupId>
<artifactId>SSHDemo1</artifactId>
<packaging>war</packaging>
<name>SSHDemo1 Maven Webapp</name>
<url>http://maven.apache.org</url>
<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.1.0.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>
</dependencies>
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
</build>
</project>
2.分层搭建图:
3.resource下的文件配置如下:
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: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/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="${jdbc.driverClassName}"/>
<property name="user" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
<property name="jdbcUrl" value="${jdbc.url}"/>
</bean>
<!--jdbc.properties-->
<context:property-placeholder location="classpath:jdbc.properties"></context:property-placeholder>
<!-- 配置session工厂 类:Local-->
<bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="hibernateProperties">
<props>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.format_sql">true</prop>
<prop key="hbm2ddl.auto">update</prop>
<prop key="hibernate.dialect"> org.hibernate.dialect.Oracle10gDialect</prop>
<prop key="hibernate.current_session_context_class">org.springframework.orm.hibernate5.SpringSessionContext</prop>
</props>
</property>
<property name="mappingDirectoryLocations" value="classpath:cn/jjz/pojo"></property>
</bean>
<!--3.dao-->
<bean id="rsDao" class="cn.jjz.dao.RsDaoImpl">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<!--4.service-->
<bean id="rsService" class="cn.jjz.service.RsServiceImpl">
<property name="rsDao" ref="rsDao"></property>
</bean>
<!--要用Spring去创建Action对象 Struts2的Action是多例的-->
<bean id="rsAction" class="cn.jjz.action.RsAction" scope="prototype">
<property name="rsService" ref="rsService"></property>
</bean>
<!-- 事务管理器-->
<bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<!--事务-->
<tx:annotation-driven transaction-manager="transactionManager"></tx:annotation-driven>
</beans>
jdbc.properties:
jdbc.driverClassName=oracle.jdbc.OracleDriver
jdbc.url=jdbc:oracle:thin:@localhost:1521:orcl
jdbc.username=jjz
jdbc.password=jjz
struts.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<constant name="struts.devMode" value="true"></constant>
<package name="one" namespace="/" extends="struts-default">
<action name="add" class="rsAction" method="add">
<result name="success">/ok.jsp</result>
</action>
</package>
</struts>
4.pojo层:
Rs:
package cn.jjz.pojo;
import javax.persistence.Entity;
/**
* Created by lenovo on 2017/9/22.
*/
public class Rs {
private String id;
private String name;
private int age;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
Rs.hbm.xml:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<!-- package声明pojo类所在的包,如果不写 那么在class中需要指明pojo类所在的包
schema指数据库模式 一个模式下可以有多张表
-->
<hibernate-mapping package="cn.jjz.pojo">
<!-- class指映射一个实体类entity
提供了公共的无参构造方法-通过反射产生对象
属性用private修饰,并且生成对应的get/set方法
类不能用final来修饰-hibernate会产生代理类(cglib)
类需要指明标识
name表示pojo类名
table表示pojo类对应数据库中的表名;如果不写默认是类名
-->
<class name="Rs" table="Rs" dynamic-update="true">
<!--
id表示实体类的标识(OID)
对应数据库表中的主键
name指实体类的标识属性名
column表示对应数据库表的列名:如果不写 则数据库表中列名和属性名一致
length表示数据库表中 对应数据类型的长度 ,如果不写有默认长度
type表示类型如果不写hibernate可以找到对应pojo类的属性的类型
-->
<id name="id" column="id">
<generator class="uuid"></generator>
</id>
<property name="name" column="name"></property>
<property name="age" column="age"></property>
</class>
</hibernate-mapping>
5.dao层:
RsDaoImpl:
package cn.jjz.dao;
import cn.jjz.pojo.Rs;
import org.hibernate.SessionFactory;
/**
* Created by lenovo on 2017/10/29.
*/
public class RsDaoImpl implements RsDao {
private SessionFactory sessionFactory;
public void add(Rs rs) {
sessionFactory.getCurrentSession().save(rs);
}
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
public SessionFactory getSessionFactory() {
return sessionFactory;
}
}
6.service层:
package cn.jjz.service;
import cn.jjz.dao.RsDaoImpl;
import cn.jjz.pojo.Rs;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
/**
* Created by lenovo on 2017/10/29.
*/
public class RsServiceImpl implements RsService {
private RsDaoImpl rsDao;
@Transactional
public void add(Rs rs) {
rsDao.add(rs);
}
public void setRsDao(RsDaoImpl rsDao) {
this.rsDao = rsDao;
}
public RsDaoImpl getRsDao() {
return rsDao;
}
}
7.actioin层:
RsAction:
package cn.jjz.action;
import cn.jjz.pojo.Rs;
import cn.jjz.service.RsService;
import com.opensymphony.xwork2.ActionSupport;
/**
* Created by lenovo on 2017/10/29.
*/
public class RsAction extends ActionSupport {
private Rs rs;
private RsService rsService;
public String add(){
rsService.add(rs);
return SUCCESS;
}
public Rs getRs() {
return rs;
}
public void setRs(Rs rs) {
this.rs = rs;
}
public RsService getRsService() {
return rsService;
}
public void setRsService(RsService rsService) {
this.rsService = rsService;
}
}
8.web.xml:
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<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>/add.jsp</welcome-file>
</welcome-file-list>
</web-app>
9.对应的jsp页面(略)
10.部署项目并运行