ssm项目环境搭建
一、SSM 框架概述
(一)框架组成与优势
SSM(Spring + Spring MVC + MyBatis)是 Java 企业级开发中经典的三层架构组合:
- Spring:核心容器负责 Bean 管理与依赖注入(DI),通过 AOP 实现事务管理、日志记录等功能,简化组件间协作。
- Spring MVC:基于 MVC 模式的 Web 框架,分离控制器(Controller)、模型(Model)和视图(View),优化前端请求处理流程。
- MyBatis:ORM(对象关系映射)框架,通过 XML 或注解配置实现 SQL 映射,简化 JDBC 操作,提升数据库访问效率。
优势:轻量级、灵活性高、社区资源丰富,适用于中大型 Web 项目开发。
(二)应用场景
- 企业级信息管理系统(如 OA、ERP)
- 电商平台、门户网站、内容管理系统(CMS)
二、环境搭建与依赖配置
(一)开发环境准备
- JDK:建议 1.8+(需配置环境变量)
- IDE:IntelliJ IDEA(推荐)/Eclipse
- 服务器:Tomcat 8.5+
- 数据库:MySQL 5.7+/Oracle
- 构建工具:Maven 3.6+(管理项目依赖)
(二)Maven 项目创建与依赖配置
1. 创建 Maven Web 项目
- 在 IDEA 中选择
Create New Project
→Maven
→ 勾选Create from archetype
→ 选择maven-archetype-webapp
。
2. 添加核心依赖(pom.xml)
<dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${spring.version}</version></dependency><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><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-aspects</artifactId><version>${spring.version}</version></dependency><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.7</version></dependency><!--mybatis和siring的整合包--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>2.0.6</version></dependency><!-- 连接池--><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.0.9</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>5.1.6</version></dependency><!--Log4j日志--><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version></dependency><!--https://mvnrepository.com/artifact/com.qithub.pagehelper/pagehelper--><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><version>5.2.0</version></dependency><!-- 日志 --><dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.2.3</version></dependency><!-- ServletAPI --><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</version><scope>provided</scope></dependency><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.3.1</version></dependency><!--Spring5和Thymeleaf整合包--><dependency><groupId>org.thymeleaf</groupId><artifactId>thymeleaf-spring5</artifactId><version>3.0.12.RELEASE</version></dependency>
三、核心配置文件详解
(一)Spring 配置(applicationContext.xml)
1. 数据库连接池配置
<!-- 加载属性文件 -->
<context:property-placeholder location="classpath:jdbc.properties"/><!-- Druid连接池 -->
<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>
2. MyBatis 工厂 Bean 配置
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="dataSource"/><!-- 配置MyBatis全局配置文件 --><property name="configLocation" value="classpath:mybatis-config.xml"/><!-- 自动扫描Mapper接口路径 --><property name="mapperLocations" value="classpath:mapper/*.xml"/>
</bean><!-- 扫描Mapper接口并注册为Bean -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><property name="basePackage" value="com.example.mapper"/>
</bean>
(二)Spring MVC 配置(springmvc.xml)
1. 注解驱动与视图解析器
<!-- 开启注解驱动 -->
<mvc:annotation-driven/><!-- 视图解析器(示例:使用html) -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/pages/"/><property name="suffix" value=".html"/>
</bean><!-- 静态资源放行 -->
<mvc:resources mapping="/static/**" location="/static/"/>
2. 扫描 Controller 包
<context:component-scan base-package="com.qcby.controller"/>
(三)Web.xml 配置
<!-- Spring容器初始化 -->
<listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param><param-name>contextConfigLocation</param-name><param-value>classpath:applicationContext.xml</param-value>
</context-param><!-- Spring MVC前端控制器 -->
<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:springmvc.xml</param-value></init-param><load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping><servlet-name>springmvc</servlet-name><url-pattern>/</url-pattern>
</servlet-mapping><!-- 编码过滤器 -->
<filter><filter-name>characterEncodingFilter</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><init-param><param-name>forceRequestEncoding</param-name><param-value>true</param-value></init-param>
</filter>
<filter-mapping><filter-name>characterEncodingFilter</filter-name><url-pattern>/*</url-pattern>
</filter-mapping>
四、实战案例:用户管理模块开发
(一)项目结构规划
src/main/java
├── com.example
│ ├── controller (控制器层)
│ ├── service (服务层)
│ ├── dao/mapper (数据访问层)
│ └── pojo (实体类)
src/main/resources
├── mapper (MyBatis映射文件)
├── mybatis-config.xml (MyBatis全局配置)
└── db.properties (数据库配置)
src/main/webapp
├── WEB-INF/views (视图层JSP)
└── static (静态资源)
(二)实体类定义(User.java)
public class User {private Integer id;private String username;private String password;private Date createTime;// 省略getter/setter/toString
}
(三)Mapper 接口与映射文件
1. UserMapper.java
public interface UserMapper {List<User> selectAll();User selectById(Integer id);int insert(User user);int update(User user);int delete(Integer id);
}
2. UserMapper.xml
<mapper namespace="com.qcby.dao.UserMapper"><select id="selectAll" resultType="com.qcby.pojo.User">SELECT * FROM user</select><select id="selectById" resultType="com.qcby.pojo.User">SELECT * FROM user WHERE id = #{id}</select><insert id="insert" parameterType="com.qcby.pojo.User">INSERT INTO user (username, password, create_time)VALUES (#{username}, #{password}, #{createTime})</insert><!-- 省略update和delete语句 -->
</mapper>
(四)服务层实现(UserService.java)
@Service
public class UserService {@Autowiredprivate UserMapper userMapper;public List<User> getAllUsers() {return userMapper.selectAll();}// 省略其他业务方法
}
(五)控制器层(UserController.java)
@Controller
@RequestMapping("/user")
public class UserController {@Autowiredprivate UserService userService;@GetMapping("/list")public String list(Model model) {List<User> userList = userService.getAllUsers();model.addAttribute("userList", userList);return "user/list"; // 对应视图文件user/list.jsp}// 省略新增、修改、删除接口
}
(六)视图层示例(list.jsp)
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>用户列表</title>
</head>
<body><h1>用户管理系统</h1><table border="1"><tr><th>ID</th><th>用户名</th><th>创建时间</th></tr><c:forEach items="${userList}" var="user"><tr><td>${user.id}</td><td>${user.username}</td><td><fmt:formatDate value="${user.createTime}" pattern="yyyy-MM-dd HH:mm:ss"/></td></tr></c:forEach></table>
</body>
</html>
五、常见问题与解决方案
(一)依赖冲突
- 现象:编译时报类重复错误(如
ClassNotFoundException
)。 - 解决:使用
mvn dependency:tree
命令查看依赖树,排除冲突版本,指定统一版本。
(二)MyBatis 映射失败
- 检查点:
- Mapper 接口与映射文件的
namespace
是否一致。 - SQL 语句的
id
是否与接口方法名一致。 - MyBatis 配置文件是否正确扫描
mapperLocations
。
- Mapper 接口与映射文件的
(三)Spring MVC 请求 404
- 排查步骤:
- 确认
DispatcherServlet
映射路径是否正确(如/
或*.do
)。 - 检查 Controller 类是否添加
@Controller
注解,方法是否添加@RequestMapping
。 - 视图解析器路径是否与 JSP 文件路径匹配。
- 确认
六、拓展与优化建议
(一)集成日志框架
- 添加 Log4j 2 或 SLF4J 依赖,在 Spring 配置中加入日志配置文件,记录关键业务操作和异常信息。
(二)使用事务管理
- 在 Service 方法上添加
@Transactional
注解,结合 Spring AOP 实现声明式事务控制,保证数据一致性。
(三)前后端分离改造
- 将 Spring MVC 替换为 Spring Boot + Spring WebFlux,前端使用 Vue/React,通过 RESTful API 交互(需调整响应格式为 JSON)。
(四)性能优化
- MyBatis 开启二级缓存,配置
cacheEnabled="true"
。 - 数据库层优化 SQL 语句,添加索引,使用连接池监控工具(如 Druid 监控面板)。
七、总结与学习资源推荐
(一)核心优势总结
- 分层清晰:解耦各层职责,便于团队协作开发。
- 灵活性高:可替换模块(如 MyBatis 换 Hibernate),适应不同项目需求。
- 生态成熟:大量第三方库支持(如 Spring Security、Redis 集成)。
(二)学习资源
- 官方文档:
- Spring Framework Reference
- MyBatis Documentation
通过以上步骤,你已掌握 SSM 框架的核心配置与开发流程。实际项目中需结合业务场景灵活调整,逐步积累优化经验。如需进一步探讨某模块细节,欢迎留言交流!