因为前段时间自己想写个SSM的demo,然而不知怎么回事,配置完之后出现错误,怎么都调不好。最后从朋友那里拷了一个SSM的demo过来搭建成功,写这篇东西也是为了以后如果还有需要可以方便的查阅,并且也可能帮到一些别的和我一样的新程序员。

  首先说一下版本,我采用的是IDEA 2018,maven版本是3.5.3,需要额外说明的是,maven和jdk有版本对应k要求,可以去官网查看,http://maven.apache.org/docs/history.html。SSM的版本可以在之后的pom.xml里看到。好了,接下来开始搭建SSM工程。

  1. 第一步用IDEA创建工程。在左上角依次点击 New File -> new -> Project... 然后左侧列表中,选中Maven来新建一个Maven工程。然后勾上Create from archetype来创建默认的目录,一般web项目都是选择maven-archetype-webapp,不要选错成上面的cocoon-22-archetype-webapp。最后点击next,如下图

     
  2. 然后填写自己的GroupID和ArtifactID。前者是指项目组织的唯一标识名,一般是域名+公司名+项目名,我这里就随意填了,叫MyDemo。后者是指项目唯一标识符,一般就是项目名,我这里填demo-001。

  3. 然后到了选择maven版本,这里就选择自己安装的maven版本就好,然后Local repository是配置Maven时选择的本地jar包仓库文件夹。然后理论上就可以继续下一步了,但一般来说国内maven有时候下载一些东西会很慢,导致工程的搭建速度会很慢。这里可以点击右边绿色的加号,然后填写Name:archetypeCatalog,Value:internal。因为maven在构建时会下载一个配置文件,有几M大小,容易卡住所以用这个方式使用内置的archetype-catalog.xml文件。还有别的方式可以解决,这里就不表了,可以直接去搜索archetypeCatalog internal就可以找到其他的方法。接着继续点击next。
     
  4. 然后就是一些本地的设置,比如项目名以及项目本地的存放路径。设置完点击finish来打开工程即可。
  5. 然后我们能看到工程已经被搭建好了,然后我们要做的事还有引入依赖的jar包,完善默认的项目目录。先来引入工程依赖的jar包,可以看到有一个蓝色m图标的文件叫pom.xml,就是在这个文件中输入依赖的jar包信息就可以导入了。这里给出一个依赖的清单,把这段xml代码直接复制到dependencies标签中,然后再点击右小角IDEA弹出的Import changes,也可以点击Enable Auto-Import来使用自动引入。pom.xml的dependencies标签内的配置代码如下:
            <!-- 单元测试 -->
    <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.11</version>
    </dependency> <!-- 1.日志 -->
    <dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.6</version>
    </dependency>
    <!-- 实现slf4j接口并整合 -->
    <dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>1.1.1</version>
    </dependency> <!-- 2.数据库 -->
    <dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.37</version>
    <scope>runtime</scope>
    </dependency>
    <dependency>
    <groupId>c3p0</groupId>
    <artifactId>c3p0</artifactId>
    <version>0.9.1.2</version>
    </dependency> <!-- DAO: MyBatis -->
    <dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.3.0</version>
    </dependency>
    <dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis-spring</artifactId>
    <version>1.2.3</version>
    </dependency> <!-- 3.Servlet web -->
    <dependency>
    <groupId>taglibs</groupId>
    <artifactId>standard</artifactId>
    <version>1.1.2</version>
    </dependency>
    <dependency>
    <groupId>jstl</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
    </dependency>
    <dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.5.4</version>
    </dependency>
    <dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
    </dependency> <!-- 4.Spring -->
    <!-- 1)Spring核心 -->
    <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>4.1.7.RELEASE</version>
    </dependency>
    <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-beans</artifactId>
    <version>4.1.7.RELEASE</version>
    </dependency>
    <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>4.1.7.RELEASE</version>
    </dependency>
    <!-- 2)Spring DAO层 -->
    <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>4.1.7.RELEASE</version>
    </dependency>
    <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-tx</artifactId>
    <version>4.1.7.RELEASE</version>
    </dependency>
    <!-- 3)Spring web -->
    <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-web</artifactId>
    <version>4.1.7.RELEASE</version>
    </dependency>
    <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>4.1.7.RELEASE</version>
    </dependency>
    <!-- 4)Spring test -->
    <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-test</artifactId>
    <version>4.1.7.RELEASE</version>
    </dependency> <!-- wx-tools 依赖包 -->
    <!-- HttpClient -->
    <dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5.6</version>
    </dependency>
    <dependency>
    <groupId>commons-collections</groupId>
    <artifactId>commons-collections</artifactId>
    <version>3.2</version>
    </dependency>
    <!-- http -->
    <dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpmime</artifactId>
    <version>4.3.6</version>
    </dependency>
    <!-- XML -->
    <dependency>
    <groupId>com.thoughtworks.xstream</groupId>
    <artifactId>xstream</artifactId>
    <version>1.4.7</version>
    </dependency>
    <dependency>
    <groupId>org.dom4j</groupId>
    <artifactId>dom4j</artifactId>
    <version>2.0.0</version>
    </dependency>
    <!-- IO -->
    <dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.4</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->
    <dependency>
    <groupId>commons-fileupload</groupId>
    <artifactId>commons-fileupload</artifactId>
    <version>1.3.1</version>
    </dependency>
    <!-- Json -->
    <dependency>
    <groupId>org.json</groupId>
    <artifactId>json</artifactId>
    <version>20180130</version>
    </dependency>
    <!-- 分页PageHelper -->
    <dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper</artifactId>
    <version>4.1.6</version>
    </dependency>
  6. 如果没有问题的话,那么已经成功导入了一般项目需要用的jar包了。接下来把默认的目录补全。这一步可做也可不做,比如有时只是做一个很小的项目,可能不需要那么清晰的分层。首先在src下的main文件夹下新建一个java和resource文件夹,然后右键文件夹名,在菜单的下面找到Mark Directory as,将java文件夹设置为Sources Root,resource文件夹设置为Resources Root。然后在src下建立一个和main同级的test文件夹,然后在test下再建立一个java和resource文件夹,分别标记为Test Sources Root和Test Resources Root。然后我们在main下的java文件夹根据需要来新建几个包,dao、dto、controller、entity、enums、exception、service、util等。其中service下再建一个子目录叫impl。建完的目录大致如下:
     
  7. 首先需要在webapp/WEB-INF下新建一个jsp目录,用来存放jsp页面。之所以建在WEB-INF文件夹下,是因为WEB-INF下的资源无法通过浏览器直接获取,有较高安全性。然后接下来就是配置web.xml文件,代码如下(红名路径不用管,等配置结束后即可):
    <web-app xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
    http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    version="3.0"
    metadata-complete="true">
    <!-- 修改servlet版本为3.1 -->
    <!-- 配置DispatcherServlet -->
    <servlet>
    <servlet-name>demo-dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!-- 配置springMVC需要加载的配置文件
    spring-dao.xml,spring-service.xml,spring-web.xml
    Mybatis -> spring -> springMVC
    -->
    <init-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:spring/spring-*.xml</param-value>
    </init-param>
    </servlet>
    <filter>
    <filter-name>encodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter </filter-class>
    <init-param>
    <param-name>encoding</param-name>
    <param-value>utf8</param-value>
    </init-param>
    </filter> <filter-mapping>
    <filter-name>encodingFilter</filter-name >
    <url-pattern>/*</url-pattern>
    </filter-mapping>
    <servlet-mapping>
    <servlet-name>demo-dispatcher</servlet-name>
    <!-- 默认匹配所有的请求 -->
    <url-pattern>/</url-pattern>
    </servlet-mapping> <!-- 这里配置默认进入的主页,根据需要填写 -->
    <welcome-file-list>
    <welcome-file>home.jsp</welcome-file>
    </welcome-file-list> </web-app>
  8. 接下来就是添加Spring的配置文件了,这里将Spring的配置文件分成三部分,dao、service和web。首先先在main/resource下建一个目录叫spring。然后分别新建三个文件:spring-dao.xml、spring-service.xml、spring-web.xml。spring-dao.xml代码如下(其中${ jdbc.xxx }是自己的数据库连接属性,也可以在main/resource下新建一个jdbc.properties来存放连接属性,在properties中使用的是键值对保存,举例:key是jdbc.url = 数据库URL)
    <?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
    http://www.springframework.org/schema/context/spring-context.xsd" >
    <!-- 配置整合mybatis过程 -->
    <!-- 1.配置数据库相关参数properties的属性:${url} -->
    <context:property-placeholder location="classpath:jdbc.properties"/>
    <!-- 2.数据库连接池 -->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
    <!-- 3.配置连接池属性 -->
    <property name="driverClass" value="${jdbc.driver}"/>
    <property name="jdbcUrl" value="${jdbc.url}"/>
    <property name="user" value="${jdbc.username}"/>
    <property name="password" value="${jdbc.password}"/> <!-- c3p0连接池的私有属性 -->
    <property name="maxPoolSize" value="30"/>
    <property name="minPoolSize" value="10"/>
    <!-- 关闭链接后不自动commit -->
    <property name="autoCommitOnClose" value="false"/>
    <!-- 获取连接超时时间 -->
    <property name="checkoutTimeout" value="1000"/>
    <!-- 当前获取连接失败重试次数 -->
    <property name="acquireRetryAttempts" value="2"/>
    </bean> <!-- 3.配置SqlSessionFactory对象 -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <!-- 注入数据库连接池 -->
    <property name="dataSource" ref="dataSource"/>
    <!-- 配置MyBatis全局配置文件:mybatis-config.xml -->
    <property name="configLocation" value="classpath:mybatis-config.xml"/>
    <!-- 扫描entity包 使用别名 -->
    <property name="typeAliasesPackage" value="entity"/>
    <!-- 扫描sql配置文件:mapper需要的配置xml文件, -->
    <property name="mapperLocations" value="classpath:mapper/*/*.xml"/>
    </bean> <!-- 4.配置扫描Dao接口包,动态实现Dao接口,注入到spring容器中 -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <!-- 注入sqlSessionFactory -->
    <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
    <!-- 给出需要扫描Dao接口包 -->
    <property name="basePackage" value="dao"/>
    </bean> </beans>

    spring-service.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:tx="http://www.springframework.org/schema/tx"
    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
    http://www.springframework.org/schema/context/spring-context.xsd
    http://www.springframework.org/schema/tx
    http://www.springframework.org/schema/tx/spring-tx.xsd"
    default-autowire="byName"> <!-- 扫描service包下所有使用注解的类型 -->
    <context:component-scan base-package="service" /> <!-- 配置事务管理器 -->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <!-- 注入数据库连接池 -->
    <property name="dataSource" ref="dataSource"/>
    </bean> <!-- 配置基于注解的声明式事务 默认使用注解来管理事务行为 -->
    <tx:annotation-driven transaction-manager="transactionManager"/>
    </beans>

    spring-web.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"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context.xsd
    http://www.springframework.org/schema/mvc
    http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd"> <!-- 配置SpringMVC -->
    <!-- 1:开启SpringMVC注解模式 -->
    <!-- 简化配置:
    (1)自动注册DefaultAnnotationHandlerMapping,AnnotationMethodHandlerAdapter
    (2)提供一系列:数据绑定,数字和日期的format @NumberFormat,@DataTimeFormat,
    xml,json默认读写支持.
    -->
    <mvc:annotation-driven/> <!--
    2:静态资源默认servlet配置
    1:加入对静态资源的处理:js,gif,png
    2:允许使用"/"做整体映射
    -->
    <mvc:default-servlet-handler/> <!--3:配置jsp 显示ViewResolver -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
    <property name="prefix" value="/WEB-INF/jsp/"/>
    <property name="suffix" value=".jsp"/>
    </bean> <!--4:扫描web相关的bean -->
    <context:component-scan base-package="controller"/>
    </beans>

    这一步结束后,目录的样子应该像下图这样:

     
  9. 配置好spring的文件后,接下来配置Mybatis的配置文件。先在main/resource下新建一个mapper目录用于后续存放mybatis的映射文件。然后还是在main/resource下新建一个文件,叫做mybatis-config.xml。代码如下:
    <?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>
    <settings>
    <setting name="useGeneratedKeys" value="true"/>
    <setting name="useColumnLabel" value="true"/>
    <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>
    </configuration>
  10. 接下来还不能运行,因为此时spring-dao下有红色报错代码,如果想检验框架是否搭建完成,可以将spring-dao.xml的红色代码注释掉,部署tomcat之后运行,就能看到默认生成的index.jsp里的hello world!了。当mybatis的映射文件补齐后,就可以取消掉之前的注释了。希望大家注意这个文件里的问题,曾经的我因为没察觉到这个地方的错误,在没有写代码的时候就运行工程,发现怎么都报sqlsession的错误,现在才明白原来是缺少映射文件。希望大家不要走这段弯路。

 Terence Xie

2018.8.1 周三 20:46

IDEA + Maven + SSM 框架整合步骤的更多相关文章

  1. 基于maven的ssm框架整合

    基于maven的ssm框架整合 第一步:通过maven建立一个web项目.                第二步:pom文件导入jar包                              (1 ...

  2. 01 整合IDEA+Maven+SSM框架的高并发的商品秒杀项目之业务分析与DAO层

    作者:nnngu 项目源代码:https://github.com/nnngu/nguSeckill 这是一个整合IDEA+Maven+SSM框架的高并发的商品秒杀项目.我们将分为以下几篇文章来进行详 ...

  3. 使用IntelliJ IDEA创建Maven聚合工程、创建resources文件夹、ssm框架整合、项目运行一体化

    一.创建一个空的项目作为存放整个项目的路径 1.选择 File——>new——>Project ——>Empty Project 2.WorkspaceforTest为项目存放文件夹 ...

  4. 【转载】使用IntelliJ IDEA创建Maven聚合工程、创建resources文件夹、ssm框架整合、项目运行一体化

    一.创建一个空的项目作为存放整个项目的路径 1.选择 File——>new——>Project ——>Empty Project 2.WorkspaceforTest为项目存放文件夹 ...

  5. IDEA下基于MAVEN的SSM框架整合

    源码可以以上传github https://github.com/ingxx/ssm_first 最近把用IDEA把SSM框架整合一遍遇到了不少坑,在这里写出来 这里maven我使用的是自己下载的3. ...

  6. 史上最详细的IDEA优雅整合Maven+SSM框架(详细思路+附带源码)

    目录 前言: 1. 搭建整合环境 2.Spring框架代码的编写 3.SpringMVC框架代码的编写 4. Spring整合SpringMVC的框架 5.MyBatis框架代码的编写 6. Spri ...

  7. [JSP]Maven+SSM框架(Spring+SpringMVC+MyBatis) - Hello World

    来源:http://blog.csdn.net/zhshulin/article/details/37956105?utm_source=tuicool&utm_medium=referral ...

  8. Maven+SSM框架(Spring+SpringMVC+MyBatis)(二)

    1.基本概念 2.开发环境搭建 3.Maven Web项目创建 4.SSM整合 此次整合我分两个配置文件: 1)分别是spring-mybatis.xml,包含spring和mybatis的配置文件, ...

  9. Maven+SSM框架(Spring+SpringMVC+MyBatis) - Hello World(转发)

    [JSP]Maven+SSM框架(Spring+SpringMVC+MyBatis) - Hello World 来源:http://blog.csdn.net/zhshulin/article/de ...

随机推荐

  1. 【luogu P4231 三步必杀】 题解

    题目链接:https://www.luogu.org/problemnew/show/P4231 诶 我很迷啊..这跟树状数组有什么关系啊...拿二阶差分数组过了..? #include <cs ...

  2. 浅谈二分查找 JavaScript

    算法介绍 二分查找,也称折半查找,是一种在有序数组中查找特定元素的搜索算法.查找过程经历一下步骤: (1)从有序数组的中间的元素开始搜索,如果该元素正好是目标元素,则停止搜索并返回该元素的索引值,否则 ...

  3. vue、html与iframe html事件相互调用

    一.html文件中引入的iframe标签 1.在父html中调用子iframe html 中的事件 通过contentwindow属性 document.getElementById("my ...

  4. 全局变量重复定义,fatal error LNK1169: 找到一个或多个多重定义的符号

    1.在GlobeValue.h中定义了一个变量: char gl_UID[256]; 2.在b.cpp和e.cpp中分别引用GlobeValue.h,并且使用gl_UID的全局变量, 结果出现:fat ...

  5. python核心编程2 第七章 练习

    7-4. 建立字典. 给定两个长度相同的列表,比如说,列表[1, 2, 3,...]和['abc', 'def','ghi',...],用这两个列表里的所有数据组成一个字典,像这样:{1:'abc', ...

  6. web前端总结面试问题<CSS&HTML问题>

    一个父元素div,一个未知宽度.高度的子元素div [上下左右居中方法总结] //1.position布局,position设为absolute,其他同情景一 2.display:table 父级元素 ...

  7. 关于<meta name="viewport" content="width= device-width,user-scalable= 0,initial-scale= 1.0,minimum-scale= 1.0">

    <meta name="viewport" content=" width= device-width, user-scalable= 0, initial-sca ...

  8. 利用html2canvas将当前网页保存为图片.

    先分析下这个技术可实现的方式,以及优缺点吧! 前端实现 缺点是:兼容性查,需要高级浏览器支持,因为需要支持 canvas 绘图,还有就是会操作 html5 canvas api.(如果不会使用canv ...

  9. PHP解决跨域问题

    在做项目的过程中经常需要跨域访问.这里主要介绍一下 PHP 中怎么解决跨域问题. 1.允许所有域名访问 header('Access-Control-Allow-Origin: *'); 2.允许单个 ...

  10. [转]不让iTunes备份到c盘

    很多人现在的C盘都是空间不大的SSD硬盘,ITUNES备份老是占越来越大的空间,不如动手把它改成其它盘好了.下面7个步骤教你转移备份. 1.需要一个小工具:Juction.exe,如果你已经是WIN7 ...