1. 环境准备与项目创建
第一次用IntelliJ IDEA搭建SSM项目时,我对着空白的界面发呆了半小时——明明跟着教程操作,却总是卡在奇怪的报错上。后来才发现,很多问题都出在环境配置这个最初环节。下面这些细节建议拿小本本记好:
安装JDK时最容易踩的坑是环境变量配置。我遇到过明明JAVA_HOME设置正确,但运行java -version仍然报错的情况。后来发现需要在系统Path变量最前面加上%JAVA_HOME%\bin,否则系统会优先找到其他目录下的java.exe。建议用这个命令验证:
echo %JAVA_HOME%Maven配置更是重灾区。很多教程只告诉你要修改settings.xml,但没说要先检查IDEA自带的Maven版本。我推荐直接下载官方Maven,然后在IDEA的File -> Settings -> Build -> Maven里指定本地安装路径。特别注意这两个配置项:
- Local repository:建议改成非系统盘路径
- User settings file:指定自定义的settings.xml位置
创建项目时有个隐藏技巧:不要直接选Maven模板,而是先选Empty Project,再右键模块选择Add Framework Support添加Maven支持。这样做的好处是项目结构更清晰,后期添加多模块时不会混乱。记得勾选这两个选项:
- Create from archetype
- org.apache.maven.archetypes:maven-archetype-webapp
提示:遇到"Unable to import Maven project"错误时,先检查网络代理设置。国内用户建议配置阿里云镜像,在settings.xml中加入:
<mirror> <id>aliyunmaven</id> <mirrorOf>*</mirrorOf> <name>阿里云公共仓库</name> <url>https://maven.aliyun.com/repository/public</url> </mirror>
2. 目录结构与基础配置
刚创建好的Maven项目就像毛坯房,需要手动改造才能住人。最让人困惑的是为什么没有java和resources文件夹——这其实是Maven的标准设计,需要我们自己搭建框架。
右键main文件夹新建目录时,有四个关键文件夹要创建:
- java(存放源代码)
- resources(配置文件)
- webapp/WEB-INF(前端资源)
- test(测试代码)
每个文件夹都要标记正确类型:右键文件夹选择Mark Directory as:
- java文件夹标记为
Sources Root - resources标记为
Resources Root - test标记为
Test Sources Root
我强烈建议在webapp下创建这样的结构:
webapp ├── resources │ ├── css │ ├── js │ └── images └── WEB-INF └── views这样分离静态资源和JSP文件,后期维护会轻松很多。有个容易忽略的配置是在pom.xml中加入资源过滤:
<build> <resources> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> </resource> </resources> </build>3. 依赖管理与框架整合
SSM框架整合就像组装乐高,每个零件都要严丝合缝。我在pom.xml配置上栽过最惨的跟头是版本冲突——Spring 5和MyBatis 3.4的兼容性问题让我debug了整整两天。
这是经过实战检验的依赖配置方案:
<properties> <spring.version>5.3.18</spring.version> <mybatis.version>3.5.9</mybatis.version> <mybatis.spring.version>2.0.7</mybatis.spring.version> </properties> <dependencies> <!-- Spring核心 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> <!-- Spring MVC --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> </dependency> <!-- MyBatis整合包 --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>${mybatis.spring.version}</version> </dependency> </dependencies>配置文件加载顺序是另一个关键点。我习惯这样组织:
resources ├── applicationContext.xml(主配置) ├── spring-mvc.xml(MVC配置) ├── mybatis-config.xml(MyBatis配置) └── jdbc.properties(数据库配置)在web.xml中要特别注意监听器配置顺序:
<context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener>4. 数据库集成与MyBatis配置
数据库连接池的选择直接影响性能。我对比过HikariCP、Druid和Tomcat JDBC,最终推荐Druid——不仅监控功能强大,而且对国产数据库兼容性更好。配置示例:
<!-- druid数据源 --> <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> <property name="maxActive" value="20"/> <property name="initialSize" value="1"/> <property name="maxWait" value="60000"/> </bean>MyBatis的SQL映射文件存放位置有讲究。我建议在resources下创建与Mapper接口同名的目录结构:
resources └── com └── example └── mapper └── UserMapper.xml这样配置时就不需要写完整路径:
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.example.mapper"/> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/> </bean>事务管理是SSM项目的安全气囊。Spring的声明式事务要这样配置才稳妥:
<!-- 事务管理器 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"/> </bean> <!-- 注解驱动 --> <tx:annotation-driven transaction-manager="transactionManager"/>在Service层使用事务时要注意:
@Service @Transactional(rollbackFor = Exception.class) // 捕获所有异常回滚 public class UserServiceImpl implements UserService { // 方法内容 }