SpringMVC(三)SSM框架整合

199 阅读1分钟

整合思路

将工程的三层结构中的JavaBean分别使用Spring容器(通过XML方式)进行管理
1.整合持久层mapper,包括数据源,SqlSessionFactory及mapper代理对象整合
2.整合业务层service,包括事务Bean及service的bean的配置
3.整合表现层Controller,直接使用springmvc的配置
4.web.xml加载spring容器(包含多个XML文件)

核心配置文件

  • applicationContext-dao.xml
  • applicationContext-service.xml
  • springmvc.xml
  • web.xml

工程搭建

依赖包

  • spring(包括springmvc)

  • mybatis

  • mybatis-spring整合包

  • 数据库驱动

  • 第三方连接池

  • JSTL

  • servlet-api

<dependencies>
		<!-- 持久层依赖 开始 -->
		<!-- spring ioc组件需要的依赖包 -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-beans</artifactId>
			<version>5.0.7.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-core</artifactId>
			<version>5.0.7.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>5.0.7.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-expression</artifactId>
			<version>5.0.7.RELEASE</version>
		</dependency>

		<!-- spring 事务管理和JDBC依赖包 -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-tx</artifactId>
			<version>5.0.7.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-jdbc</artifactId>
			<version>5.0.7.RELEASE</version>
		</dependency>

		<!-- mysql数据库驱动包 -->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>5.1.35</version>
		</dependency>

		<!-- dbcp连接池的依赖包 -->
		<dependency>
			<groupId>commons-dbcp</groupId>
			<artifactId>commons-dbcp</artifactId>
			<version>1.4</version>
		</dependency>

		<!-- mybatis依赖 -->
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis</artifactId>
			<version>3.4.5</version>
		</dependency>

		<!-- mybatis和spring的整合依赖 -->
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis-spring</artifactId>
			<version>1.3.1</version>
		</dependency>

		<!-- 持久层依赖 结束 -->

		<!-- 业务层依赖 开始 -->
		<!-- 基于AspectJ的aop依赖 -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-aspects</artifactId>
			<version>5.0.7.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>aopalliance</groupId>
			<artifactId>aopalliance</artifactId>
			<version>1.0</version>
		</dependency>
		<!-- 业务层依赖 结束 -->


		<!-- 表现层依赖 开始 -->
		<!-- spring MVC依赖包 -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
			<version>5.0.7.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-web</artifactId>
			<version>5.0.7.RELEASE</version>
		</dependency>

		<!-- jstl 取决于视图对象是否是JSP -->
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>jstl</artifactId>
			<version>1.2</version>
		</dependency>

		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>javax.servlet-api</artifactId>
			<version>3.1.0</version>
			<scope>provided</scope>
		</dependency>


		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context-support</artifactId>
			<version>5.0.7.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-oxm</artifactId>
			<version>5.0.7.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>com.thoughtworks.xstream</groupId>
			<artifactId>xstream</artifactId>
			<version>1.4.10</version>
		</dependency>


		<dependency>
			<groupId>com.fasterxml.jackson.core</groupId>
			<artifactId>jackson-databind</artifactId>
			<version>2.9.6</version>
		</dependency>


		<!-- 表现层依赖 结束 -->

		<!-- spring 单元测试组件包 -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-test</artifactId>
			<version>5.0.7.RELEASE</version>
		</dependency>

		<!-- 单元测试Junit -->
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.12</version>
		</dependency>

		<!-- Mock测试使用的json-path依赖 -->
		<dependency>
			<groupId>com.jayway.jsonpath</groupId>
			<artifactId>json-path</artifactId>
			<version>2.2.0</version>
		</dependency>


		<!-- 文件上传 -->
		<dependency>
			<groupId>commons-fileupload</groupId>
			<artifactId>commons-fileupload</artifactId>
			<version>1.3.1</version>
		</dependency>
	</dependencies>
	<build>
		<plugins>
			<!-- 配置Maven的JDK编译级别 -->
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>3.2</version>
				<configuration>
					<source>1.8</source>
					<target>1.8</target>
					<encoding>UTF-8</encoding>
				</configuration>
			</plugin>

			<plugin>
				<groupId>org.apache.tomcat.maven</groupId>
				<artifactId>tomcat7-maven-plugin</artifactId>
				<version>2.2</version>
				<configuration>
					<path>/</path>
					<port>80</port>
				</configuration>
			</plugin>
		</plugins>
	</build>

工程整合

整合Mapper

  • applicationContext-dao.xml(核心)

    在classpath下,创建spring目录,然后创建applicationContext-dao.xml

<!-- 加载db.properties -->
	<context:property-placeholder
		location="classpath:db.properties" />
	<!-- 配置数据源 -->
	<bean id="dataSource"
		class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
		<property name="driverClassName" value="${jdbc.driver}" />
		<property name="url" value="${jdbc.url}" />
		<property name="username" value="${jdbc.username}" />
		<property name="password" value="${jdbc.password}" />
		<property name="maxActive" value="30" />
		<property name="maxIdle" value="5" />
	</bean>

	<!-- 配置SqlSessionFacotory -->
	<bean id="sqlSessionFactory"
		class="org.mybatis.spring.SqlSessionFactoryBean">
		<!-- 配置数据源 -->
		<property name="dataSource" ref="dataSource" />
		<property name="typeAliasesPackage" value="com.xxx.ssm.po"></property>
	</bean>

	<!-- 配置mapper扫描器,SqlSessionConfig.xml中的mapper配置去掉 -->
	<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
		<!-- 指定扫描的包 -->
		<property name="basePackage" value="com.xxx.ssm.mapper" />
	</bean>
  • db.properties

    在classpath下,创建db.properties

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/ssm?characterEncoding=utf8
jdbc.username=root
jdbc.password=root
  • log4j.properties

    在classpath下,创建log4j.properties

#dev env [debug] product   env [info]   
log4j.rootLogger=DEBUG,   stdout   
# Console output...   
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p   [%t] - %m%n   

整合Service

  • applicationContext-service.xml

    在spring文件夹下创建applicationContext-service.xml,文件中配置service。在这个配置文件中,需要配置service的bean和事务管理。

<!-- 扫描Service -->
	<context:component-scan
		base-package="com.xxx.ssm.service" />

	<!-- 配置事务 -->
	<!-- 事务管理器,对mybatis操作数据库进行事务控制,此处使用jdbc的事务控制 -->
	<bean id="transactionManager"
		class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<!-- 指定要进行事务管理的数据源 -->
		<property name="dataSource" ref="dataSource"></property>
	</bean>

	<!-- 通知 -->
	<tx:advice id="txAdvice"
		transaction-manager="transactionManager">
		<tx:attributes>
			<!-- 传播行为 -->
			<tx:method name="save*" propagation="REQUIRED" />
			<tx:method name="add*" propagation="REQUIRED" />
			<tx:method name="insert*" propagation="REQUIRED" />
			<tx:method name="delete*" 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="find*" read-only="true" />
			<tx:method name="query*" read-only="true" />
			<tx:method name="select*" read-only="true" />
			<tx:method name="get*" read-only="true" />
		</tx:attributes>
	</tx:advice>

	<!-- aop -->
	<aop:config>
		<aop:advisor advice-ref="txAdvice"
			pointcut="execution(* *..*.*ServiceImpl.*(..))" />
	</aop:config>

整合Controller

Spring和springmvc之间无需整合,直接用springmvc的配置

  • web.xml

    在web.xml中添加springmvc的配置

    在web.xml中,使用监听器来对spring的配置文件进行加载

<!-- 配置前端控制器 -->
	<servlet>
		<servlet-name>ssm</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>classpath:spring/springmvc.xml</param-value>
		</init-param>
		<load-on-startup>2</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>ssm</servlet-name>
		<url-pattern>/</url-pattern>
	</servlet-mapping>

	<!-- 指定持久层和业务层的spring配置文件路径 -->
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath:spring/applicationContext-*.xml</param-value>
	</context-param>
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>
  • springmvc.xml

    在spring包下创建springmvc.xml文件

 <!-- 配置处理器Bean的读取 -->
	<!-- 扫描controller注解,多个包中间使用半角逗号分隔 -->
	<context:component-scan base-package="com.xxx.ssm.controller"/>
    
    <!-- 配置三大组件之处理器适配器和处理器映射器 -->
    <mvc:annotation-driven />   
    
    <!-- 配置三大组件之视图解析器 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="prefix" value="/WEB-INF/jsp/" />
		<property name="suffix" value=".jsp" />
	</bean>