首页 IDEA+Maven+SpringMVC+Spring+Mybatis SSM集成记录
文章
取消

IDEA+Maven+SpringMVC+Spring+Mybatis SSM集成记录

前言

这段时间自己开始转 java后台,开始的第一个项目需要搭建 SSM框架,由于是 mac系统,被 eclipse虐了无数遍,最终转战 IDEA,使用 IDEA搭建完成了自己的第一个 SSM框架,特地在此记录一下;

github Demo地址

工具介绍

  • IDEA 2017
  • java SDK 1.7.0_79
  • Tomcat 7.0.79
  • Maven 3.5
  • SpringMVC ,Spring 4.3.7
  • Mybatis 3.4.2

创建 Maven工程

新建工程

勾选上 Creat from archetype,选择后缀名为 maven-archetype-webapp的项目,如果刚安装 IDEA, 需要在 Project SDK:那配置一下安装的 Java sdk版本.下一步

填一下团队名,项目名,下一步

配置一下自己安装的 Maven的根路径路径, Maven的 setting.xml路径,以及 Maven的仓库路径,一般配置好 Maven 的根路径以后下面的两个系统就自动选择好了>_<,下一步

设置工程名称,然后点击 Finish

等待工程自己进行初始化配置,等右下角的进度条都完成以后,工程的整体项目结构如下:

配置 Tomcat,先把工程跑起来试试看

点击这个向下的小箭头

选择这个

配置 Tomcat

全部设置完成以后启动 Tomcat,运行成功

开始集成 SSM框架

首先配置文件,创建包,需要配置的文件有:

  • pom.xml
  • applicationContext.xml
  • mybatis.config.xml
  • dbconfig.properties
  • dispatcherServlet-servlet.xml
  • web.xml

基本结构如图(配置文件在后面):

创建完配置文件以后,使用 Mybatis的 Maven插件逆向工程创建 bean,dao,以及 mapper文件 在 pom.xml中添加这一段,集成 Mybatis的 Maven插件(下文中的 pom.xml文件已添加)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
  <build>
     <finalName>webTest</finalName>

     <plugins>
       <plugin>
         <groupId>org.mybatis.generator</groupId>
         <artifactId>mybatis-generator-maven-plugin</artifactId>
         <version>1.3.5</version>
         <configuration>
           <configurationFile>src/main/resources/generatorConfig.xml</configurationFile>
           <verbose>true</verbose>
           <overwrite>true</overwrite>
         </configuration>
       </plugin>
     </plugins>
 </build>

创建插件配置文件 generatorConfig.xml,通过下图配置,运行该文件,在 Maven的 Command line:输入 mybatis-generator:generate -e 点击 ok:

运行, Mybatis 自动创建出 bean,dao,mapper 文件

到这里, SSM 框架整合完成,运行 Tomcat,整体项目结构如图:


华丽的分割线


generatorConfig.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
  <?xml version="1.0" encoding="UTF-8"?>
  <!DOCTYPE generatorConfiguration
          PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
          "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
  <generatorConfiguration>
      <properties resource="dbconfig.properties"></properties>

      <classPathEntry location="/Users/mac/Desktop/gittub/maven_jar/mysql/mysql-connector-java/5.1.41/mysql-connector-java-5.1.41.jar" />

      <context id="context1" targetRuntime="MyBatis3">

          <commentGenerator>
              <!-- 去除自动生成的注释 -->
              <property name="suppressAllComments" value="true" />
          </commentGenerator>

          <!-- 数据库连接配置 -->
          <jdbcConnection driverClass="${jdbc.driverClass}"
                          connectionURL="${jdbc.jdbcUrl}"
                          userId="${jdbc.user}"
                          password="${jdbc.password}" />
          <!--jdbcConnection driverClass="com.mysql.jdbc.Driver"
                          connectionURL="jdbc:mysql://localhost:3306/test"
                          userId="root"
                          password="mysql" /-->

          <!-- 非必需,类型处理器,在数据库类型和java类型之间的转换控制-->
          <javaTypeResolver>
              <property name="forceBigDecimals" value="false"/>
          </javaTypeResolver>

          <!--配置生成的实体包
              targetPackage:生成的实体包位置,默认存放在src目录下
              targetProject:目标工程名
           -->
          <javaModelGenerator targetPackage="com.bxv8.bean"
                              targetProject="src/main/java" />

          <!-- 实体包对应映射文件位置及名称,默认存放在src目录下 -->
          <sqlMapGenerator targetPackage="mapper" targetProject="src/main/resources"/>

          <!-- 指定dao接口生成的位置,mapper接口 -->
          <javaClientGenerator type="XMLMAPPER"
                               targetPackage="com.bxv8.dao"
                               targetProject="src/main/java">
              <property name="enableSubPackages" value="true" />
          </javaClientGenerator>

          <!-- 配置表
              schema:不用填写
              tableName: 表名
              enableCountByExample、enableSelectByExample、enableDeleteByExample、enableUpdateByExample、selectByExampleQueryId:
              去除自动生成的例子
          -->
          <!-- table指定每个表的生成策略 -->
          <table tableName="t_TVType" domainObjectName="TVType"></table>

      </context>
  </generatorConfiguration>

pom.xml 文件内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
 <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/maven-v4_0_0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <groupId>com.bxv8w</groupId>
   <artifactId>webTest</artifactId>
   <packaging>war</packaging>
   <version>1.0-SNAPSHOT</version>
   <name>webTest Maven Webapp</name>
   <url>http://maven.apache.org</url>
   <dependencies>
     <dependency>
       <groupId>junit</groupId>
       <artifactId>junit</artifactId>
       <version>3.8.1</version>
       <scope>test</scope>
     </dependency>

     <dependency>
       <groupId>commons-io</groupId>
       <artifactId>commons-io</artifactId>
       <version>2.2</version>
     </dependency>
 
 
     <!--引入项目依赖的jar包 -->
     <!-- SpringMVC、Spring -->
     <!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
 
     <!--引入pageHelper分页插件 -->
     <dependency>
       <groupId>com.github.pagehelper</groupId>
       <artifactId>pagehelper</artifactId>
       <version>5.0.0</version>
     </dependency>
 
     <!-- MBG -->
     <!-- https://mvnrepository.com/artifact/org.mybatis.generator/mybatis-generator-core -->
     <dependency>
       <groupId>org.mybatis.generator</groupId>
       <artifactId>mybatis-generator-core</artifactId>
       <version>1.3.5</version>
     </dependency>
 
     <dependency>
       <groupId>org.springframework</groupId>
       <artifactId>spring-context</artifactId>
       <version>4.3.7.RELEASE</version>
     </dependency>
 
     <dependency>
       <groupId>org.springframework</groupId>
       <artifactId>spring-webmvc</artifactId>
       <version>4.3.7.RELEASE</version>
     </dependency>
 
     <!-- 返回json字符串的支持 -->
     <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
     <dependency>
       <groupId>com.fasterxml.jackson.core</groupId>
       <artifactId>jackson-databind</artifactId>
       <version>2.8.8</version>
     </dependency>
 
     <!--JSR303数据校验支持;tomcat7及以上的服务器,
     tomcat7以下的服务器:el表达式。额外给服务器的lib包中替换新的标准的el
     -->
     <!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-validator -->
     <dependency>
       <groupId>org.hibernate</groupId>
       <artifactId>hibernate-validator</artifactId>
       <version>5.4.1.Final</version>
     </dependency>
 
 
     <!-- Spring-Jdbc -->
     <!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
     <dependency>
       <groupId>org.springframework</groupId>
       <artifactId>spring-jdbc</artifactId>
       <version>4.3.7.RELEASE</version>
     </dependency>
 
     <!--Spring-test -->
     <!-- https://mvnrepository.com/artifact/org.springframework/spring-test -->
     <dependency>
       <groupId>org.springframework</groupId>
       <artifactId>spring-test</artifactId>
       <version>4.3.7.RELEASE</version>
     </dependency>
 
 
     <!-- Spring面向切面编程 -->
     <!-- https://mvnrepository.com/artifact/org.springframework/spring-aspects -->
     <dependency>
       <groupId>org.springframework</groupId>
       <artifactId>spring-aspects</artifactId>
       <version>4.3.7.RELEASE</version>
     </dependency>
 
     <!--MyBatis -->
     <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
     <dependency>
       <groupId>org.mybatis</groupId>
       <artifactId>mybatis</artifactId>
       <version>3.4.2</version>
     </dependency>
     <!-- MyBatis整合Spring的适配包 -->
     <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
     <dependency>
       <groupId>org.mybatis</groupId>
       <artifactId>mybatis-spring</artifactId>
       <version>1.3.1</version>
     </dependency>
 
     <!-- 数据库连接池、驱动 -->
     <!-- https://mvnrepository.com/artifact/c3p0/c3p0 -->
     <dependency>
       <groupId>c3p0</groupId>
       <artifactId>c3p0</artifactId>
       <version>0.9.1</version>
     </dependency>
     <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
     <dependency>
       <groupId>mysql</groupId>
       <artifactId>mysql-connector-java</artifactId>
       <version>5.1.41</version>
     </dependency>
     <!-- (jstl,servlet-api,junit) -->
     <!-- https://mvnrepository.com/artifact/jstl/jstl -->
     <dependency>
       <groupId>jstl</groupId>
       <artifactId>jstl</artifactId>
       <version>1.2</version>
     </dependency>
 
     <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
     <dependency>
       <groupId>javax.servlet</groupId>
       <artifactId>javax.servlet-api</artifactId>
       <version>3.0.1</version>
       <scope>provided</scope>
     </dependency>
 
 
     <!-- junit -->
     <!-- https://mvnrepository.com/artifact/junit/junit -->
     <dependency>
       <groupId>junit</groupId>
       <artifactId>junit</artifactId>
       <version>4.12</version>
     </dependency>

   </dependencies>

   <build>
     <finalName>webTest</finalName>

     <plugins>
       <plugin>
         <groupId>org.mybatis.generator</groupId>
         <artifactId>mybatis-generator-maven-plugin</artifactId>
         <version>1.3.5</version>
         <configuration>
           <configurationFile>src/main/resources/generatorConfig.xml</configurationFile>
           <verbose>true</verbose>
           <overwrite>true</overwrite>
         </configuration>
       </plugin>
     </plugins>

   </build>

 </project>

applicationContext.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
  <?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:aop="http://www.springframework.org/schema/aop"
        xmlns:tx="http://www.springframework.org/schema/tx"
        xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
   http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
   http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd
   http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">

     <context:component-scan base-package="com.bxv8">
         <context:exclude-filter type="annotation"
                                 expression="org.springframework.stereotype.Controller" />
     </context:component-scan>

     <!-- Spring的配置文件,这里主要配置和业务逻辑有关的 -->
     <!--=================== 数据源,事务控制,xxx ================-->
     <context:property-placeholder location="classpath:dbconfig.properties" />
     <bean id="pooledDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
         <property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property>
         <property name="driverClass" value="${jdbc.driverClass}"></property>
         <property name="user" value="${jdbc.user}"></property>
         <property name="password" value="${jdbc.password}"></property>
     </bean>

     <!--================== 配置和MyBatis的整合=============== -->
     <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
         <!-- 指定mybatis全局配置文件的位置 -->
         <property name="configLocation" value="classpath:mybatis-config.xml"></property>
         <property name="dataSource" ref="pooledDataSource"></property>
         <!-- 指定mybatis,mapper文件的位置 -->
         <property name="mapperLocations" value="classpath:mapper/*.xml"></property>
     </bean>

     <!-- 配置扫描器,将mybatis接口的实现加入到ioc容器中 -->
     <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
         <!--扫描所有dao接口的实现,加入到ioc容器中 -->
         <property name="basePackage" value="com.bxv8.dao"></property>
     </bean>

     <!-- 配置一个可以执行批量的sqlSession -->
     <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
         <constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory"></constructor-arg>
         <constructor-arg name="executorType" value="BATCH"></constructor-arg>
     </bean>
     <!--=============================================  -->

     <!-- ===============事务控制的配置 ================-->
     <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
         <!--控制住数据源  -->
         <property name="dataSource" ref="pooledDataSource"></property>
     </bean>
     <!--开启基于注解的事务,使用xml配置形式的事务(必要主要的都是使用配置式)  -->
     <aop:config>
         <!-- 切入点表达式 -->
         <aop:pointcut expression="execution(* com.bxv8.service..*(..))" id="txPoint"/>
         <!-- 配置事务增强 -->
         <aop:advisor advice-ref="txAdvice" pointcut-ref="txPoint"/>
     </aop:config>

     <!--配置事务增强,事务如何切入  -->
     <tx:advice id="txAdvice" transaction-manager="transactionManager">
         <tx:attributes>
             <!-- 所有方法都是事务方法 -->
             <tx:method name="*"/>
             <!--以get开始的所有方法  -->
             <tx:method name="get*" read-only="true"/>
         </tx:attributes>
     </tx:advice>
     <!-- Spring配置文件的核心点(数据源、与mybatis的整合,事务控制) -->

 </beans>

mybatis.config.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
   <?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="mapUnderscoreToCamelCase" value="true"/>
     </settings>

     <typeAliases>
         <package name="com.bxv8.bean"/>
     </typeAliases>

     <plugins>
         <plugin interceptor="com.github.pagehelper.PageInterceptor">
             <!--分页参数合理化  -->
             <property name="reasonable" value="true"/>
         </plugin>
     </plugins>

 </configuration>

dbconfig.properties

1
2
3
4
5
 properties
 jdbc.jdbcUrl=jdbc:mysql://localhost:3306/db_TV?useSSL=false
 jdbc.driverClass=com.mysql.jdbc.Driver
 jdbc.user=root
 jdbc.password=123

dispatcherServlet-servlet.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
  <?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/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd
   http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
   http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">

     <!--SpringMVC的配置文件,包含网站跳转逻辑的控制,配置  -->
     <context:component-scan base-package="com.bxv8" use-default-filters="false">
         <!--只扫描控制器。  -->
         <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
     </context:component-scan>

     <!--配置视图解析器,方便页面返回  -->
     <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
         <property name="prefix" value="/WEB-INF/views/"></property>
         <property name="suffix" value=".jsp"></property>
     </bean>

     <!--两个标准配置  -->
     <!-- 将springmvc不能处理的请求交给tomcat -->
     <mvc:default-servlet-handler/>
     <!-- 能支持springmvc更高级的一些功能,JSR303校验,快捷的ajax...映射动态请求 -->
     <mvc:annotation-driven/>
 </beans>

web.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
  <?xml version="1.0" encoding="UTF-8"?>
 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xmlns="http://java.sun.com/xml/ns/javaee"
          xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
          id="WebApp_ID" version="2.5">

   <!--1、启动Spring的容器  -->
   <!-- needed for ContextLoaderListener -->
   <context-param>
     <param-name>contextConfigLocation</param-name>
     <param-value>classpath:applicationContext.xml</param-value>
   </context-param>

   <!-- Bootstraps the root web application context before servlet initialization -->
   <listener>
     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
   </listener>

   <!--2、springmvc的前端控制器,拦截所有请求  -->
    <!--The front controller of this Spring Web application, responsible for handling all application requests -->
   <servlet>
     <servlet-name>dispatcherServlet</servlet-name>
     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
     <load-on-startup>1</load-on-startup>
   </servlet>

   <!-- Map all requests to the DispatcherServlet for handling -->
   <servlet-mapping>
     <servlet-name>dispatcherServlet</servlet-name>
     <url-pattern>/</url-pattern>
   </servlet-mapping>

   <!-- 3、字符编码过滤器,一定要放在所有过滤器之前 -->
   <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>
     <init-param>
       <param-name>forceResponseEncoding</param-name>
       <param-value>true</param-value>
     </init-param>
   </filter>
   <filter-mapping>
     <filter-name>CharacterEncodingFilter</filter-name>
     <url-pattern>/*</url-pattern>
   </filter-mapping>

   <!-- 4、使用Rest风格的URI,将页面普通的post请求转为指定的delete或者put请求 -->
   <filter>
     <filter-name>HiddenHttpMethodFilter</filter-name>
     <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
   </filter>
   <filter-mapping>
     <filter-name>HiddenHttpMethodFilter</filter-name>
     <url-pattern>/*</url-pattern>
   </filter-mapping>
   <filter>
     <filter-name>HttpPutFormContentFilter</filter-name>
     <filter-class>org.springframework.web.filter.HttpPutFormContentFilter</filter-class>
   </filter>
   <filter-mapping>
     <filter-name>HttpPutFormContentFilter</filter-name>
     <url-pattern>/*</url-pattern>
   </filter-mapping>

 </web-app>
本文由作者按照 CC BY 4.0 进行授权