说明 本文通过图文的方式详细介绍了通过IDEA如何搭建一个SSM项目,对于那些对IDEA不熟悉或者之前没有使用过IDEA的小伙伴是非常友好的。项目已经上传到github,地址:https://github.com/gitlxp1101/ssm_demo.git 1.用IDEA创建一个web项目1.1 在开始界面创建项目打开IDEA,点击如下图红框圈住的选项![](https://p1-jj.byteimg.com/tos-cn-i-t2oaga2asx/gold-user-assets/2020/7/11/1733cceac7b2f4d0~tplv-t2oaga2asx-zoom-in-crop-mark:4536:0:0:0.image) 1.2 从当前打开的项目页面再创建新项目有些小伙伴打开IDEA是直接进入上一次关闭的项目的,可以选择:File->New->Project
![](https://p1-jj.byteimg.com/tos-cn-i-t2oaga2asx/gold-user-assets/2020/7/11/1733ccf59ddd86d8~tplv-t2oaga2asx-zoom-in-crop-mark:4536:0:0:0.image) 1.3 选择archetype选择maven,勾选Create from archetype,选择maven-archetype-web-app,选好后就点击“next”吧。如下图所示:![](https://p1-jj.byteimg.com/tos-cn-i-t2oaga2asx/gold-user-assets/2020/7/11/1733cd03d7ac2ef1~tplv-t2oaga2asx-zoom-in-crop-mark:4536:0:0:0.image) 1.4 给项目起名给GroupId 和ArtifactId起个合适的名字,接下来要选择maven的配置和项目存放的位置,这里大家自己配置就好了,然后就一直点击“next”,直到项目创建完成。如下图所示:![](https://p1-jj.byteimg.com/tos-cn-i-t2oaga2asx/gold-user-assets/2020/7/11/1733cd0ccbd5abda~tplv-t2oaga2asx-zoom-in-crop-mark:4536:0:0:0.image) 1.5 创建好的项目和目录结构![](https://p1-jj.byteimg.com/tos-cn-i-t2oaga2asx/gold-user-assets/2020/7/11/1733cd2c69211d68~tplv-t2oaga2asx-zoom-in-crop-mark:4536:0:0:0.image) 2 创建目录细心的小伙伴可能就会发现,这种方式创建的项目是缺少存放类和资源的目录的,所有需要我们自己去创建。2.1 创建存放Java代码的目录:java鼠标右键选择main目录 -> New -> Directory,给新建目录起名为“java”![](https://p1-jj.byteimg.com/tos-cn-i-t2oaga2asx/gold-user-assets/2020/7/11/1733cd20fcd77286~tplv-t2oaga2asx-zoom-in-crop-mark:4536:0:0:0.image)
![](https://p1-jj.byteimg.com/tos-cn-i-t2oaga2asx/gold-user-assets/2020/7/11/1733cd23ab2de54f~tplv-t2oaga2asx-zoom-in-crop-mark:4536:0:0:0.image) 2.2 让IDEA识别这个存放类的目录新建的“Java”目录是不会被识别成存放类的目录的,需要进行标记,才能被识别。具体操作为:鼠标右键选择main目录 -> New -> Mark Directory as -> Sources Root![](https://p1-jj.byteimg.com/tos-cn-i-t2oaga2asx/gold-user-assets/2020/7/11/1733cd3893324fa6~tplv-t2oaga2asx-zoom-in-crop-mark:4536:0:0:0.image) 2.3 目录颜色变化 细心的小伙伴就能发现“java”目录的颜色由灰色变成了蓝色,这里我创建了一个resources目录。大家可以对比看一下:![](https://p1-jj.byteimg.com/tos-cn-i-t2oaga2asx/gold-user-assets/2020/7/11/1733cd464ce61a7b~tplv-t2oaga2asx-zoom-in-crop-mark:4536:0:0:0.image) 2.4 目录标记这里我简单解释下 Mark Directory as 选项展示的标记部分具体作用(大家应该也能从这些选项看出具体作用):Sources Root :用于存放Java代码Test Sources Root :用于存放Java测试代码ReSources Root :用于项目开发存储资源的文件夹,如配置文件,类路径(classpath)级别,一般代码中需要用到某些资源,比如resources被标记为ReSources Root,该目录有个applicationContext.xml,在代码中写路径的时候,就可以这样填:classpath:applicationContext.xmlTest ReSources Root :用于项目测试开发存储资源的文件夹![](https://p1-jj.byteimg.com/tos-cn-i-t2oaga2asx/gold-user-assets/2020/7/11/1733cd538b2d3323~tplv-t2oaga2asx-zoom-in-crop-mark:4536:0:0:0.image) 2.5 创建资源目录:resources步骤与上步骤基本一致,需要将resources目录标记为:Resources Root![](https://p1-jj.byteimg.com/tos-cn-i-t2oaga2asx/gold-user-assets/2020/7/11/1733cd5e6bfe6f98~tplv-t2oaga2asx-zoom-in-crop-mark:4536:0:0:0.image) 2.6 测试目录这个项目结构也同样确实测试目录,需要我们自己构建2.6.1 在src目录下创建一个“test”目录,与“main”目录是同级的2.6.2 在“test”目录下分别创建“java”目录和“resources”目录,分别标记为“Test Sources Root”和“Test ReSources Root”(这里参考上一节,步骤是差不多的)2.7 项目整体目录结构![](https://p1-jj.byteimg.com/tos-cn-i-t2oaga2asx/gold-user-assets/2020/7/11/1733cd747e77e1c6~tplv-t2oaga2asx-zoom-in-crop-mark:4536:0:0:0.image) 3 引入maven依赖这里我先所有需要用到依赖放在下面了 4.0.0 com.example ssm_demo 1.0-SNAPSHOT war ssm_demo Maven Webapp http://www.example.com UTF-8 1.8 1.8 UTF-8 UTF-8 4.0.0.RELEASE 3.4.1 1.3.0 org.apache.tomcat tomcat-servlet-api 7.0.64 org.springframework spring-webmvc ${org.springframework.version} org.springframework spring-oxm ${org.springframework.version} org.springframework spring-jdbc ${org.springframework.version} org.springframework spring-tx ${org.springframework.version} org.springframework spring-test ${org.springframework.version} org.aspectj aspectjweaver 1.7.3 org.mybatis mybatis-spring ${org.mybatis.spring.version} org.mybatis mybatis ${org.mybatis.version} com.github.pagehelper pagehelper 4.1.0 com.alibaba druid-spring-boot-starter 1.1.10 org.mybatis.generator mybatis-generator-core 1.3.7 mysql mysql-connector-java 5.1.6 org.aspectj aspectjrt 1.6.11 org.codehaus.jackson jackson-mapper-asl 1.9.12 ch.qos.logback logback-classic 1.1.2 compile ch.qos.logback logback-core 1.1.2 compile com.google.guava guava 20.0 org.apache.commons commons-lang3 3.5 commons-collections commons-collections 3.2.1 junit junit 4.12 joda-time joda-time 2.3 org.hashids hashids 1.0.1 commons-fileupload commons-fileupload 1.2.2 commons-io commons-io 2.0.1 ssm_demo maven-clean-plugin 3.1.0 maven-resources-plugin 3.0.2 maven-compiler-plugin 3.8.0 maven-surefire-plugin 2.22.1 maven-war-plugin 3.2.2 maven-install-plugin 2.5.2 maven-deploy-plugin 2.8.2 复制代码4 容器加载Spring配置文件4.1 监听器在web.xml中配置一个监听器,用于tomcat容器启动后加载Spring的配置文件,这里我给Spring的配置文件起名为:applicationContext.xml,在resources目录下。![](https://p1-jj.byteimg.com/tos-cn-i-t2oaga2asx/gold-user-assets/2020/7/11/1733cd89a13c9cb1~tplv-t2oaga2asx-zoom-in-crop-mark:4536:0:0:0.image) 4.2 配置applicationContext.xml这里简单介绍两个常用标签4.2.1 包扫描如图,可以,容器启动后可以扫描到包“com.example”及其子包的所有注解![](https://p1-jj.byteimg.com/tos-cn-i-t2oaga2asx/gold-user-assets/2020/7/11/1733cd9881f4a27f~tplv-t2oaga2asx-zoom-in-crop-mark:4536:0:0:0.image) 4.2.1 切面通过配置织入@Aspectj切面 ![](https://p1-jj.byteimg.com/tos-cn-i-t2oaga2asx/gold-user-assets/2020/7/11/1733cd9f088cde6f~tplv-t2oaga2asx-zoom-in-crop-mark:4536:0:0:0.image) 4.3 applicationContext.xml完整配置 复制代码5 容器加载SpringMVC配置文件5.1 在web.xml中配置拦截规则![](https://p1-jj.byteimg.com/tos-cn-i-t2oaga2asx/gold-user-assets/2020/7/11/1733cdd6103ca050~tplv-t2oaga2asx-zoom-in-crop-mark:4536:0:0:0.image) 5.2 springmvc的配置文件如果在web.xml同级目录下配置 "拦截器名-servlet.xml",springmvc会自动扫描该文件。如我配置的拦截器名字为“dispatcher”,那么与web.xml同目录下的 “dispatcher-servlet.xml” 就会被扫描。5.3 dispatcher-servlet.xml 完整配置,配置中也有具体解释。 text/plain; text/html;charset=UTF-8 application/json;charset=UTF-8 复制代码5.4 web.xml完整配置 Archetype Created Web Application characterEncodingFilter org.springframework.web.filter.CharacterEncodingFilter encoding UTF-8 forceEncoding true characterEncodingFilter /* org.springframework.web.context.request.RequestContextListener org.springframework.web.context.ContextLoaderListener contextConfigLocation classpath:applicationContext.xml dispatcher org.springframework.web.servlet.DispatcherServlet 1 dispatcher / 复制代码5.5 目前项目目录结构![](https://p1-jj.byteimg.com/tos-cn-i-t2oaga2asx/gold-user-assets/2020/7/11/1733ce0321a38d83~tplv-t2oaga2asx-zoom-in-crop-mark:4536:0:0:0.image) 5.6 小结至此,我们已经完成了Spring+SpringMVC的整合,接下来我们先测试下有没有问题5.6.1 在IDEA中配置该项目,用于启动5.6.1.1 如图所示,IDEA顶部点击“Edit Configurations”![](https://p1-jj.byteimg.com/tos-cn-i-t2oaga2asx/gold-user-assets/2020/7/11/1733ce14ea767de1~tplv-t2oaga2asx-zoom-in-crop-mark:4536:0:0:0.image) 5.6.1.2 参考下图配置![](https://p1-jj.byteimg.com/tos-cn-i-t2oaga2asx/gold-user-assets/2020/7/11/1733ce1e9313e6fe~tplv-t2oaga2asx-zoom-in-crop-mark:4536:0:0:0.image) 5.6.1.3 点击就能看到如下图配置页面![](https://p1-jj.byteimg.com/tos-cn-i-t2oaga2asx/gold-user-assets/2020/7/11/1733ce27690bd2ae~tplv-t2oaga2asx-zoom-in-crop-mark:4536:0:0:0.image) 5.6.1.4 先给项目命个名:ssm_demo5.6.1.5 这里也可以修改启动端口号,这里我就不改了,使用默认的80805.6.1.6 该配置页效果,细心的小伙伴看到了下面有一个警告,缺少“artifact”,接下来就要配置这个了。![](https://p1-jj.byteimg.com/tos-cn-i-t2oaga2asx/gold-user-assets/2020/7/11/1733ce2fe700d497~tplv-t2oaga2asx-zoom-in-crop-mark:4536:0:0:0.image) 5.6.1.7 配置artifact按如图方式添加一个artifact,记住选择带exploded结尾的版本,等会说下具体原因。![](https://p1-jj.byteimg.com/tos-cn-i-t2oaga2asx/gold-user-assets/2020/7/11/1733ce366482dc66~tplv-t2oaga2asx-zoom-in-crop-mark:4536:0:0:0.image)
![](https://p1-jj.byteimg.com/tos-cn-i-t2oaga2asx/gold-user-assets/2020/7/11/1733ce3c909a6916~tplv-t2oaga2asx-zoom-in-crop-mark:4536:0:0:0.image)
![](https://p1-jj.byteimg.com/tos-cn-i-t2oaga2asx/gold-user-assets/2020/7/11/1733ce420df9f63f~tplv-t2oaga2asx-zoom-in-crop-mark:4536:0:0:0.image) 5.6.1.8 热发布简单说下,就是程序在debug运行时,修改代码后,不需要重启项目也能看到修改后的结果。让我们回到最开始的配置页面,按下图方式配置。然后点击ok。完成![](https://p1-jj.byteimg.com/tos-cn-i-t2oaga2asx/gold-user-assets/2020/7/11/1733ce49d90cd5f5~tplv-t2oaga2asx-zoom-in-crop-mark:4536:0:0:0.image) 5.6.1.9 运行配置好后,就能看到下面的结果了,店家绿色的三角形可以启动项目,就可以在浏览器下面的结果。![](https://p1-jj.byteimg.com/tos-cn-i-t2oaga2asx/gold-user-assets/2020/7/11/1733ce53c8630726~tplv-t2oaga2asx-zoom-in-crop-mark:4536:0:0:0.image)
![](https://p1-jj.byteimg.com/tos-cn-i-t2oaga2asx/gold-user-assets/2020/7/11/1733ce55ed6b08d8~tplv-t2oaga2asx-zoom-in-crop-mark:4536:0:0:0.image) 我们这里写个测试用的Controller,然后再浏览器中看下。![](https://p1-jj.byteimg.com/tos-cn-i-t2oaga2asx/gold-user-assets/2020/7/11/1733ce60770a1f1a~tplv-t2oaga2asx-zoom-in-crop-mark:4536:0:0:0.image)
![](https://p1-jj.byteimg.com/tos-cn-i-t2oaga2asx/gold-user-assets/2020/7/11/1733ce63edc17b08~tplv-t2oaga2asx-zoom-in-crop-mark:4536:0:0:0.image) 6.整合Mybatis6.1 Mybatis generator使用Mybatis generator生成model、mapper接口及mapper.xml6.1.1 新建一个“com.example.mbg”包,用于存放生成这些文件的代码6.1.2 Generator.javapackage com.example.mbg;
import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.config.Configuration;
import org.mybatis.generator.config.xml.ConfigurationParser;
import org.mybatis.generator.internal.DefaultShellCallback;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
/**
* 用于生产MBG的代码
* Created by macro on 2018/4/26.
*/
public class Generator {
public static void main(String[] args) throws Exception {
//MBG 执行过程中的警告信息
List warnings = new ArrayList();
//当生成的代码重复时,覆盖原代码
boolean overwrite = true;
//读取我们的 MBG 配置文件
InputStream is = Generator.class.getResourceAsStream("/generatorConfig.xml");
ConfigurationParser cp = new ConfigurationParser(warnings);
Configuration config = cp.parseConfiguration(is);
is.close();
DefaultShellCallback callback = new DefaultShellCallback(overwrite);
//创建 MBG
MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
//执行生成代码
myBatisGenerator.generate(null);
//输出警告信息
for (String warning : warnings) {
System.out.println(warning);
}
}
}复制代码6.1.3 配置 generatorConfig.xml上节代码中可以看到我们需要一个generatorConfig.xml(在resources目录下创建)文件,用于配置生成的信息。具体内容在我已经放在了下面,注释也写在里面,大家可以看下。 复制代码6.1.4 datasource.propertiesgeneratorConfig.xml需要数据库的连接信息,我放在了datasource.properties(在resources目录下创建)。下面展示下generator.properties的内容,大家根据自己的情况进行修改jdbc.driverClass=com.mysql.jdbc.Driver
#选择要配置的数据库
jdbc.connectionURL=jdbc:mysql://localhost:3306/spring?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
#数据库用户名
jdbc.userId=root
#数据库的密码
jdbc.password=123456复制代码6.2 整合Mybatis6.2.1 在resources目录下新建一个 applicationContext-datasource.xml用于数据库和mybatis的配置。applicationContext-datasource.xml classpath:datasource.properties 复制代码6.2.2 在applicationContext.xml中引入applicationContext-datasource.xml![](https://p1-jj.byteimg.com/tos-cn-i-t2oaga2asx/gold-user-assets/2020/7/11/1733ce9bbde774d0~tplv-t2oaga2asx-zoom-in-crop-mark:4536:0:0:0.image) 6.2.3 测试6.2.3.1 在测试类TestController添加如下,然后启动tomcat![](https://p1-jj.byteimg.com/tos-cn-i-t2oaga2asx/gold-user-assets/2020/7/11/1733cea4c4824710~tplv-t2oaga2asx-zoom-in-crop-mark:4536:0:0:0.image) 6.2.3.2 在浏览器中输入如下,可以看到结果![](https://p1-jj.byteimg.com/tos-cn-i-t2oaga2asx/gold-user-assets/2020/7/11/1733ceae8e61f01c~tplv-t2oaga2asx-zoom-in-crop-mark:4536:0:0:0.image) 6.2.3.3 该数据库文件我放在的resources/db目录下,需要的小伙伴可以自己去添加到自己的数据库中![](https://p1-jj.byteimg.com/tos-cn-i-t2oaga2asx/gold-user-assets/2020/7/11/1733ceb6b1491393~tplv-t2oaga2asx-zoom-in-crop-mark:4536:0:0:0.image) 6.3 项目整体结构![](https://p1-jj.byteimg.com/tos-cn-i-t2oaga2asx/gold-user-assets/2020/7/11/1733cec1942d3760~tplv-t2oaga2asx-zoom-in-crop-mark:4536:0:0:0.image)
|