以下是 SSM框架(Spring + Spring MVC + MyBatis)整合配置的详细步骤,适用于 Maven 项目。
(一)、pom.xml中添加相关依赖
<?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>org.example</groupId><artifactId>hirain-reader</artifactId><version>1.0-SNAPSHOT</version><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><repositories><!--创建私服地址--><repository><id>aliyun</id><name>aliyun</name><url>https://maven.aliyun.com/repository/public</url></repository></repositories><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.3.30</version></dependency><!--freemarker--><dependency><groupId>org.freemarker</groupId><artifactId>freemarker</artifactId><version>2.3.31</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context-support</artifactId><version>5.3.30</version></dependency><!--Jackson--><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-core</artifactId><version>2.17.2</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-annotations</artifactId><version>2.17.2</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.17.2</version></dependency><!--MyBatis--><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.3.30</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.13</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>2.0.7</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.33</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.2.8</version></dependency><!--单元测试依赖--><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>5.3.30</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version><scope>test</scope></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version><scope>test</scope></dependency><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>4.0.1</version></dependency><!--logback日志组件--><dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.2.3</version></dependency><!--Mybatis-Plus--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus</artifactId><version>3.5.12</version></dependency></dependencies>
</project>
(二)、配置web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"version="4.0">
<!--配置DispatcherServlet--><servlet><servlet-name>springmvc</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:applicationContext.xml</param-value></init-param></servlet><servlet-mapping><servlet-name>springmvc</servlet-name><url-pattern>/</url-pattern></servlet-mapping>
<!--解决中文乱码--><filter><filter-name>characterFilter</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-mapping><filter-name>characterFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>
</web-app>
(三)、配置applicationContext.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/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd
"><!--开启SpringMVC注解模式--><context:component-scan base-package="com.hirain"/><mvc:annotation-driven><!--解决响应中文乱码问题--><mvc:message-converters><bean class="org.springframework.http.converter.StringHttpMessageConverter"><property name="supportedMediaTypes"><list><value>text/html;charset=utf-8</value><!--Json序列化输出配置--><value>application/json;charset=utf-8</value></list></property></bean></mvc:message-converters></mvc:annotation-driven><mvc:default-servlet-handler/><!--配置FreeMarker模板引擎--><bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer"><property name="templateLoaderPath" value="/WEB-INF/ftl"/><property name="freemarkerSettings"><props><prop key="defaultEncoding">UTF-8</prop></props></property></bean><bean id="ViewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver"><property name="contentType" value="text/html;charset=utf-8"/><property name="suffix" value=".ftl"/></bean><!--Mybatis与Spring的整合配置--><bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"><property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/><property name="url"value="jdbc:mysql://localhost:3306/hirain_reader?useUnicode=true&charactorEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai"/><property name="username" value="root"/><property name="password" value="root"/><property name="initialSize" value="10"/><property name="maxActive" value="20"/></bean><!--<bean id="sessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">--><!--改为使用mybatis-plus来实现sessionFactory--><bean id="sessionFactory" class="com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean"><property name="dataSource" ref="dataSource"/><property name="mapperLocations" value="classpath:mappers/*.xml"/><property name="configLocation" value="classpath:mybatis-config.xml"/></bean><!--配置Mapper扫描器--><bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><property name="basePackage" value="com.hirain.reader.mapper"/></bean><!--声明式事务配置--><!--1、配置事务管理器,用于事务创建、提交、回滚--><bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource"/></bean><!--2、启用注解形式声明式事务--><tx:annotation-driven transaction-manager="transactionManager"/>
</beans>
(四)、 mybatis-config.xml
(MyBatis全局配置)
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><settings><!-- 开启驼峰命名转换 --><setting name="mapUnderscoreToCamelCase" value="true"/></settings><plugins><!--配置mybatisplus分页插件--><plugin interceptor="com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor"></plugin></plugins>
</configuration>
(五)、 logback.xml
(日志格式配置)
<?xml version="1.0" encoding="utf-8" ?>
<configuration><appender name="console" class="ch.qos.logback.core.ConsoleAppender"><encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"><pattern>%d{HH:mm:ss} %-5level [%thread] %logger{30} -- %msg%n</pattern><charset>UTF-8</charset></encoder></appender><root level="debug"><appender-ref ref="console"/></root>
</configuration>
(六)、项目结构
src/main/java
├── com.hirain.reader.controller # Controller层
├── com.hirain.reader.service # Service层(接口+实现类)
├── com.hirain.reader.dao # DAO层(MyBatis Mapper接口)
├── com.hirain.reader.mapper # mapper接口
src/main/resources
├── mybatis-config.xml # MyBatis全局配置(可选)
├── mappers/*.xml # MyBatis SQL映射文件
├── applicationContext.xml # Spring核心配置
├──logback.xml # 日志相关配置webapp
├── WEB-INF
│ └── web.xml # Web部署描述文件
│ └──ftl # ftl模板文件夹
│ │ └──test.ftl #测试文件
└── static # 静态资源(CSS/JS/图片)
(七)、测试Mybatis整合是否成功
1、在mapper包下创建TestMapper接口
package com.hirain.reader.mapper;public interface TestMapper {public void insert();
}
2、创建TestService
package com.hirain.reader.service;import com.hirain.reader.mapper.TestMapper;
import org.springframework.stereotype.Service;import javax.annotation.Resource;@Service
public class TestService {@Resourceprivate TestMapper testMapper;@Transactionalpublic void batchInsert(){for (int i = 0; i < 10; i++) {if(i==3){throw new RuntimeException("预期之外的异常");}testMapper.insert();}System.out.println("数据导入成功!");}
}
3、resources\mappers下创建TestMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.hirain.reader.mapper.TestMapper"><insert id="insert">INSERT INTO test (content) VALUES ('sn123456')</insert>
</mapper>
4、为TestService 生成测试类并运行
package com.hirain.reader.service;import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;import javax.annotation.Resource;import static org.junit.Assert.*;@RunWith(SpringJUnit4ClassRunner.class) // 使用 Spring 的测试运行器
@ContextConfiguration(locations = {"classpath:applicationContext.xml"}) // 加载 Spring 配置文件
public class TestServiceTest {@Resourceprivate TestService testService;@Testpublic void batchInsert() {testService.batchInsert();}
}
** (八)、测试freemarker是否整合成功**
1、test.ftl代码如下:
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
测试页面
</body>
</html>
2、创建TestController
package com.hirain.reader.controller;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;import java.util.HashMap;
import java.util.Map;@Controller
@RequestMapping("/test")
public class TestController {@GetMapping("/t1")public ModelAndView test1(){return new ModelAndView("test");}@GetMapping("/t2")@ResponseBodypublic Map test2(){Map result=new HashMap<String,String>();result.put("message", "成功");return result;}
}
3、启动tomcat,浏览器中分别输入“http://localhost:8080/test/t1”和“http://localhost:8080/test/t2”进行测试