Java – Spring – SSM整合配置
简介
主要对Spring,SpringMVC和Mybatis三个系统进行配置和整合。
配置Maven依赖
以下是Maven 的 SSM基本依赖配置。
<?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>cn.unsoft</groupId>
<artifactId>SSMIntegrate</artifactId>
<version>1.0-SNAPSHOT</version>
<!-- 设置打包类型,如果是普通包则是jar,如果是webapp网页应用程序的话就选择war包,因为war包在Tomcat上会自动解压-->
<packaging>war</packaging>
<!-- 定义编译JDK版本-->
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!-- 定义Spring版本号,因为导入的Spring包比较多,为了统一包的版本号,定义了一个统一的属性-->
<spring.version>5.3.24</spring.version>
</properties>
<dependencies>
<!-- Spring上下文依赖包 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- Spring Bean 的依赖包 用于管理Bean 类的 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- SpringMVC 相关依赖包 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- SpringMVC 相关依赖包 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- Spring JDBC 依赖包 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- Spring AOP切面编程依赖包 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- Spring 整合 JUnit 依赖包 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- Mybatis核心 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.11</version>
</dependency>
<!-- Mybatis和Spring的整合包 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.1.0</version>
</dependency>
<!-- 数据库数据源连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.15</version>
</dependency>
<!-- junit 测试依赖包 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!-- MySQL驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.28</version>
</dependency>
<!-- log4j日志 -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<!-- 分页功能插件 -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.3.2</version>
</dependency>
<!-- 日志 -->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.4.5</version>
</dependency>
<!-- Servlet API -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<!-- JSON自动化解析依赖包 -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.12.1</version>
</dependency>
<!-- 文件上传依赖包 -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.4</version>
</dependency>
<!-- Spring5和Thymeleaf整合包 -->
<dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf-spring5</artifactId>
<version>3.0.13.RELEASE</version>
</dependency>
</dependencies>
</project>
配置SpringMVC.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
<!-- 注解 Bean 扫描-->
<context:component-scan base-package="cn.unsoft"></context:component-scan>
<!-- 配置Thymeleaf视图解析器 -->
<bean id="viewResolver"
class="org.thymeleaf.spring5.view.ThymeleafViewResolver">
<property name="order" value="1"/>
<property name="characterEncoding" value="UTF-8"/>
<property name="templateEngine">
<bean class="org.thymeleaf.spring5.SpringTemplateEngine">
<property name="templateResolver">
<bean class="org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver">
<!-- 视图前缀 -->
<property name="prefix" value="/WEB-INF/templates/"/>
<!-- 视图后缀 -->
<property name="suffix" value=".html"/>
<property name="templateMode" value="HTML5"/>
<property name="characterEncoding" value="UTF-8"/>
</bean>
</property>
</bean>
</property>
</bean>
<!-- 开启MVC注解驱动 -->
<mvc:annotation-driven/>
<!-- 对于ThymeleafViewResolver无法被处理的静态请求,使用默认Tomcat处理 -->
<mvc:default-servlet-handler/>
<!-- 视图控制器,不需要控制器方法处理的页面,可以直接配置访问 -->
<mvc:view-controller path="/" view-name="index"></mvc:view-controller>
<!-- 上传文件需要引入的Bean -->
<!-- 参阅:https://www.tzming.com/posts/1047 -->
<!-- <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"></bean>-->
<!-- 请求控制器方法拦截器,用于对控制器方法的执行前后置处理 -->
<!-- 参阅:https://www.tzming.com/posts/1048 -->
<!-- <mvc:interceptors>-->
<!-- <mvc:interceptor>-->
<!-- <mvc:mapping path="/url"></mvc:mapping>-->
<!-- <ref bean="firstInterceptor" />-->
<!-- <bean class="firstInterceptor" />-->
<!-- </mvc:interceptor>-->
<!-- </mvc:interceptors>-->
<!-- 请求异常处理器,用于对控制器方法在执行过程中出现异常时的处理方法 -->
<!-- 参阅:https://www.tzming.com/posts/1050 -->
<!-- <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">-->
<!-- <property name="exceptionMappings">-->
<!-- <props>-->
<!-- <!–-->
<!-- properties的键表示处理器方法执行过程中出现的异常-->
<!-- properties的值表示若出现指定异常时,设置一个新的视图名称,跳转到指定页面-->
<!-- –>-->
<!-- <prop key="java.lang.ArithmeticException">error</prop>-->
<!-- </props>-->
<!-- </property>-->
<!-- <!–-->
<!-- exceptionAttribute属性设置一个属性名,将出现的异常信息在请求域中进行共享-->
<!-- –>-->
<!-- <property name="exceptionAttribute" value="ex"></property>-->
<!-- </bean>-->
</beans>
配置Spring.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
<!-- 导入jdbc.properties文件,包含数据库连接信息 -->
<context:property-placeholder location="classpath:jdbc.properties"/>
<!-- 使用 Druid 进行数据源管理,导入 jdbc.properties 文件里的参数值 -->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName" value="${jdbc.driver}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</bean>
</beans>
Spring 整合 Mybatis
在SSM项目中,Mybatis是交由Spring进行管理的,由 mybatis-spring 依赖提供了 Spring 整合 Mybatis 的 Bean 类 SqlSessionFactoryBean.
创建 Mybatis 核心配置
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 外部配置properties文件-->
<!-- <properties resource=""></properties>-->
<!-- Mapper包别名-->
<!-- <typeAliases>-->
<!-- <package name=""></package>-->
<!-- </typeAliases>-->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql:///jdbc?serverTimezone=UTC"/>
<property name="username" value=""/>
<property name="password" value=""/>
</dataSource>
</environment>
<environment id="test">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql:///jdbc?serverTimezone=UTC"/>
<property name="username" value=""/>
<property name="password" value=""/>
</dataSource>
</environment>
<environment id="production">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql:///jdbc?serverTimezone=UTC"/>
<property name="username" value=""/>
<property name="password" value=""/>
</dataSource>
</environment>
</environments>
<mappers>
<package name=""/>
</mappers>
</configuration>
配置在Mybatis配置文件中
我们知道,如果要把Mybatis交由Spring IOC管理,则Mybatis对象的创建将在Spring.xml中配置。
通过Spring.xml中配置 Mybatis 的 Bean 实现 Mybatis 整合到 Spring IOC 中,设置 configLocation 属性指定 Mybatis 核心配置文件位置。
【Spring.xml】
<!-- 把Mybatis整合到 Spring 中 -->
<bean class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="configLocation" value="classpath:Mybatis-config.xml"></property>
</bean>
配置在Spring配置文件中
除了可以单独把Mybatis配置项在Mybatis配置文件中配置外。
SqlSessionFactoryBean 还提供了在Mybatis配置文件中所具有的配置项,因此我们可以选择把部分Mybatis配置放在Spring中进行配置,那么Mybatis配置文件中就可以不再配置。
<!-- 把Mybatis整合到 Spring 中 -->
<bean class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="configLocation" value="classpath:Mybatis-config.xml"></property>
<!-- 通过引用DataSource数据源配Mybatis的数据源 -->
<property name="dataSource" ref="dataSource"></property>
<!-- 配置所以的实体类别名 -->
<property name="typeAliasesPackage" value="cn.unsoft.pojo"></property>
</bean>
通过在Spring中配置部分Mybatis配置项后,Mybatis核心配置文件中的相应配置可以忽略。
当然如果这种配置方式比较容易混乱,可以不配置在Spring IOC 中
Mapper接口IOC管理
Mybatis 中的SqlSession需要通过获取Mapper接口的class,获取到Mapper接口的抽象方法,当SqlSession被IOC管理之后,Mapper接口随之也需要交由IOC进行管理。
Spring-Mybatis 提供了一种非常方便的类MapperScannerConfigurer。
它可以通过扫描的方式,把所有的Mapper接口接管并交给IOC自动管理。
Spring.xml
<!--
配置mapper接口的扫描配置
由mybatis-spring提供,可以将指定包下所有的mapper接口创建动态代理
并将这些动态代理作为IOC容器的bean管理
-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="cn.unsoft.mapper"></property>
</bean>
配置log4j曰志
配置事务管理器
配置数据库处理的事务管理,并把事务管理交给Spring IOC 中。
Spring.xml
<!--
配置数据库事务管理器
并开启注解驱动,开启事务注解驱动后,就可以在实现类中使用注解的方式进行事务管理
https:// www.tzming.com/posts/1025
-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
<tx:annotation-driven transaction-manager="transactionManager"/>
Service 实现类中,就可以通过【@Transactional】对数据操作加入事务管理功能。
配置分页插件
mybatis-config.xml
<plugins>
<!--设置分页插件-->
<plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin>
</plugins>
关于分页插件的使用,可以参考下面文章
SSM整合项目打包下载
提供一分基本整合完成的SSM基础项目打包,提供日后如有不懂时研究,或当作项目环境搭建模板使用。
共有 0 条评论