从零开始Eclipse/Maven搭建SSM框架做web应用(超详细+100%可用+避坑版)

目前SSM框架(Spring+SpringMVC+Mybatis)依然是市场主流,如何搭建一个实用的SSM框架是很多同学都想学习的技能。但网络上的大多数教程要么不完整,要么还遗留了很多坑,即使严格按教程来也很难得到我们想要的结果。所以我就想自己写一篇搭建攻略,即使零基础的同学,按我的攻略步骤也能搭出一个实用的SSM框架。

一、SSM框架介绍

标准的mvc结构包含model(模型层),view(视图层)和controller(控制层)。该模式在一套SSM框架中对应的是:model包含数据库和dao层(数据库连接及存取技术层),controller包含controller层(资源解析映射并向视图层发送数据)和service层(业务处理),view包含所有前端(jsp、html、css、js、vm等文件)。

二、预安装程序

  1. Jdk 1.7
  2. eclipse(注意jdk版本和eclipse版本的匹配,高版本eclipse不支持低版本jdk。我用的是从官网下载的eclipse-jee-mars-R-win32-x86_64版本,只支持jdk1.7以上版本)
  3. tomcat(同样注意和jdk版本匹配问题。我用的是7.0.82版本)
  4. maven(我用的是3.2.1版本)
  5. 远端maven库使用阿里云的库,配置相关setting.xml文件(具体配置后面会介绍)。
  6. 数据库(我用的mysql 5.6.21)

萌新尽量安装和我一样版本的程序,以免出现不兼容的问题。如果没有一模一样的,保证大版本一致也行,如mysql用5.6.*的都可以。具体的安装步骤和环境变量配置请自行百度,此处不赘述。

三、搭建步骤

步骤一、新建maven项目

1、新建一个eclipse工程,该路径主要存放eclipse相关文件,并提供该项目编译、部署和运行时的环境。
在这里插入图片描述
2、eclipse配置
2.1 Window—Preferences—General—Workspace,设置Text file encoding为UTF-8
在这里插入图片描述
2.2 Window—Preferences—Java—Installed JREs,添加自己安装的jdk并勾选,注意选jdk路径下而不是jre路径下(选jre有个坑,具体原因我不太记得了)。
在这里插入图片描述
2.3 Window—Preferences—Maven—User Settings,导入配置好的setting.xml文件
在这里插入图片描述
settings.xml文件内容如下:

<?xml version="1.0" encoding="UTF-8"?>

<settings>
  <!-- 本地仓库地址,新建一个空文件夹即可,jar包会从远端maven库下载到该文件夹 -->
  <localRepository>F:\test_repository</localRepository>  
  <!-- 远端maven库配置 -->
  <mirrors>
	<mirror>
 		<id>alimaven</id>
 		<name>aliyun maven</name>
 		<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
 		<mirrorOf>central</mirrorOf>
	</mirror>
  </mirrors>

</settings>

2.4 Window—Preferences—Server—Runtime Environments,添加安装好的tomcat
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3、用maven创建一个web项目
3.1 File–New–Maven Project,创建Maven项目(New菜单下没有Maven Project的话就去New菜单下的Other里面找)
在这里插入图片描述
这里Use default Workspace location一般会默认勾选,代表将你要写的代码放到第一幅图的Workspace目录下。如果希望代码和工程分离的话,可以去勾选,自己另外指定一个目录(常用)。
在这里插入图片描述
在这里插入图片描述
Group Id是项目组织唯一的标识符,实际对应Java的包结构。Artifact Id是该项目的唯一标识符,实际对应项目名,也是项目根目录的名称。Version代表版本号。

3.2 创建成功即会生成下图中的目录(不同eclipse版本可能排版会不大一样),JRE库版本如果不是1.7则需要替换成1.7(替换方法在后面),index.jsp有个报错是因为没有导入javax.servlet-api的jar包,按步骤添加完jar包依赖后该报错就会消失。(该报错暂不影响程序运行)
在这里插入图片描述
如果有同学在创建项目的时候发现类似如下报错:
在这里插入图片描述
请先检查settings.xml文件是否写错。
如果settings文件没问题,就进到F:\test_repository\org\apache\maven路径下删除plugins文件夹,然后右键点击项目名–Maven–Update Project,勾选ForceUpdate of Snapshots/Releases,点击OK。
在这里插入图片描述
如果上述方法仍不可行,请进到F:\test_repository\org\apache\maven\plugins\maven-resources-plugin目录及其子文件夹中,查看是否有jar包。如果没有对应jar包或者发现有.lastUpdated文件存在,说明下载失败或者未完成下载。此时需要检查网络。如果网络没有问题,那么说明远程仓库连接异常。此时可以更换远程仓库地址,或者直接去网络下载相应jar包到本地仓库,同时将settings.xml文件中的远程仓库配置删除。(如果将settings.xml文件中远程仓库配置删除的话,那么以后所有添加的依赖都需要手动下载到本地仓库,不推荐)
如果还不能解决,恕老夫无能为力,道友请移步百度。

3.3 右键项目名–Build Path–Configure Build Path,添加JRE 1.7jar包依赖。
在这里插入图片描述
在这里插入图片描述
之前配置eclipse步骤里如果已经配置了1.7版本,此处默认就是1.7,直接确认就好。
在这里插入图片描述
remove掉1.5版本,点击Apply或OK确认。如此我们便将项目依赖的JRE jar包替换成了1.7版本。
在这里插入图片描述

3.4 Maven规定必须添加以下Source Folder:
src/main/java
src/main/resources
src/test/java
src/test/resources
如有缺失,则右键项目名–New–Source Folder,添加完整目录结构
在这里插入图片描述
右键项目名–Build Path–Configure Build Path,修改输出路径
在这里插入图片描述
右键项目名–Properties–Project Facets,修改Java为1.7版本,个别eclipse版本需要手动勾选Dynamic Web Module。
在这里插入图片描述
右键项目名–Properties–Deployment Assembly,删除test的两项,因为test是测试用的,不需要部署。另外个别eclispe版本没有添加最后一个Maven Dependencies发布到lib下,需手动添加Add–Java Build Path Entries–Maven Dependencies–Finish
在这里插入图片描述

如此一来,我们建好了一个完整的Maven web项目
在这里插入图片描述

3.5 在Tomcat上运行该Maven工程,以检测之前的步骤是否都完成了。
右键项目名–Run As–Maven clean,
右键项目名–Run As–Maven install,
右键项目名–Run As–Run On Server
在这里插入图片描述
在这里插入图片描述
如果Console下不报错且显示Server startup in *** ms或者有Hello World的页面(访问的index.jsp文件)出来,证明我们搭建的第一阶段顺利完成。
在这里插入图片描述

4、引入maven依赖jar包,包含spring,mybatis和一些常用jar包。pom.xml文件内容如下(完全覆盖原文件),如果你的groupId、artifactId和version跟我文件里不一样,则需要修改。

<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.test.ssm</groupId>
  <artifactId>ssm-base</artifactId>
  <packaging>war</packaging>
  <version>0.0.1-SNAPSHOT</version>
  <name>ssm-base Maven Webapp</name>
  <url>http://maven.apache.org</url>
  
  <properties>
  	<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  	<maven.build.timestamp.format>yyyyMMddHHmmss</maven.build.timestamp.format>
  	<spring.version>3.2.3.RELEASE</spring.version>
  	<mybatis.version>3.2.2</mybatis.version>
  	<mybatis.spring.version>1.2.0</mybatis.spring.version>
  	<mysql.jdbc.version>5.1.29</mysql.jdbc.version>
  	<slf4j.version>1.7.5</slf4j.version>
  	<mybatis.generator.vesion>1.3.5</mybatis.generator.vesion>
  </properties>
  
  <dependencies>
  	<!-- 测试依赖jar包 -->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    
    <!-- spring依赖jar包 -->
    <dependency>
    	<groupId>org.springframework</groupId>
    	<artifactId>spring-core</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-test</artifactId>
    	<version>${spring.version}</version>
    </dependency>
   		<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-tx</artifactId>
		<version>${spring.version}</version>
	</dependency>
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-jdbc</artifactId>
		<version>${spring.version}</version>
	</dependency>
	<dependency>
    	<groupId>org.aspectj</groupId>
    	<artifactId>aspectjweaver</artifactId>
    	<version>1.6.10</version>
    </dependency>
	
	<!-- mybatis依赖jar包 -->
    <dependency>
    	<groupId>org.mybatis</groupId>
    	<artifactId>mybatis</artifactId>
    	<version>${mybatis.version}</version>
    </dependency>
    <dependency>
    	<groupId>org.mybatis</groupId>
    	<artifactId>mybatis-spring</artifactId>
    	<version>${mybatis.spring.version}</version>
    </dependency>
    <!-- mybatis自动生成sql相关文件依赖jar包 -->
    <dependency>  
       	<groupId>org.mybatis.generator</groupId>  
       	<artifactId>mybatis-generator-core</artifactId>  
       	<version>${mybatis.generator.vesion}</version>
   	</dependency> 
    
    <!-- mysql依赖jar包 -->
    <dependency>
    	<groupId>mysql</groupId>
    	<artifactId>mysql-connector-java</artifactId>
    	<version>${mysql.jdbc.version}</version>
    </dependency>
    
    <!-- c3p0数据库连接池依赖jar包 -->
    <dependency>
    	<groupId>c3p0</groupId>
    	<artifactId>c3p0</artifactId>
    	<version>0.9.1.2</version>
    </dependency>
    
    <!-- Servlet依赖jar包 -->
    <dependency>
    	<groupId>javax.servlet</groupId>
    	<artifactId>servlet-api</artifactId>
    	<version>2.5</version>
    </dependency>
    <dependency>
    	<groupId>javax.servlet.jsp</groupId>
    	<artifactId>jsp-api</artifactId>
    	<version>2.2</version>
    </dependency>
	<dependency>
		<groupId>javax.servlet</groupId>
		<artifactId>jstl</artifactId>
		<version>1.2</version>
	</dependency>
    
    <!-- 文件上传依赖jar包 -->
    <dependency>
    	<groupId>commons-fileupload</groupId>
    	<artifactId>commons-fileupload</artifactId>
    	<version>1.3.1</version>
    </dependency>
    
    <!-- 辅助工具类jar包 -->
    <dependency>
    	<groupId>commons-lang</groupId>
    	<artifactId>commons-lang</artifactId>
    	<version>2.6</version>
    </dependency>
    
    <!-- 编码相关jar包 -->
    <dependency>
    	<groupId>commons-codec</groupId>
    	<artifactId>commons-codec</artifactId>
    	<version>1.9</version>
    </dependency>
    
    <!-- httpclient -->
    <dependency>
    	<groupId>org.apache.httpcomponents</groupId>
    	<artifactId>httpclient</artifactId>
    	<version>4.5.3</version>
    </dependency>
    
    <!-- 日志记录依赖jar包 -->
    <dependency>
    	<groupId>org.slf4j</groupId>
    	<artifactId>slf4j-api</artifactId>
    	<version>${slf4j.version}</version>
    </dependency>
    <dependency>
    	<groupId>org.slf4j</groupId>
    	<artifactId>slf4j-log4j12</artifactId>
    	<version>${slf4j.version}</version>
    </dependency>
    
    <!-- json工具jar包 -->
    <dependency>
    	<groupId>com.alibaba</groupId>
    	<artifactId>fastjson</artifactId>
    	<version>1.2.20</version>
    </dependency>
    <dependency>
    	<groupId>org.codehaus.jackson</groupId>
    	<artifactId>jackson-mapper-asl</artifactId>
    	<version>1.9.13</version>
    </dependency>
  </dependencies>
  
  <build>
  	<plugins>
  		<plugin>
  			<artifactId>maven-compiler-plugin</artifactId>
  			<version>3.5</version>
  			<configuration>
  				<source>1.7</source>
  				<target>1.7</target>
  			</configuration>
  		</plugin>
  		<plugin>
  			<artifactId>maven-war-plugin</artifactId>
  			<version>2.2</version>
  			<configuration>

  			</configuration>
  		</plugin>
  		
  		<!-- mybatis generator 插件 -->
      <plugin>
        <groupId>org.mybatis.generator</groupId>
    	<artifactId>mybatis-generator-maven-plugin</artifactId>
    	<version>${mybatis.generator.vesion}</version>
    	<configuration>
    	  <verbose>true</verbose>
    	  <configurationFile>src/main/resources/META-INF/generatorConfig.xml</configurationFile>
    	  <overwrite>true</overwrite>
    	</configuration>
    	<dependencies>  
        <dependency>  
            <groupId>org.mybatis.generator</groupId>  
            <artifactId>mybatis-generator-core</artifactId>  
            <version>${mybatis.generator.vesion}</version>  
        </dependency>  
        <dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis</artifactId>
			<version>3.2.2</version>
		</dependency>
    </dependencies>  
      </plugin>
  	</plugins>
    <finalName>
    	${project.artifactId}_${project.version}_${maven.build.timestamp}
    </finalName>
  </build>
</project>

5、配置web.xml文件(完全覆盖原文件)。包含web.xml在内的以下所有配置文件中,均需要注意路径、文件名和包名问题,如果你跟我所有的文件命名和配置一模一样,可暂时忽略。

<?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/j2ee" xmlns:web="http://xmlns.jcp.org/xml/ns/javaee"
	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_5.xsd"
	version="2.5">
	
	<!-- 配置Spring -->
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath:META-INF/spring/applicationContext.xml</param-value>
	</context-param>
	<context-param>
		<param-name>log4jConfigLocation</param-name>
		<param-value>classpath:META-INF/properties/log4j.properties</param-value>
	</context-param>
	<listener>
		<listener-class>
			org.springframework.web.context.ContextLoaderListener
		</listener-class>
	</listener>
	<!-- 防止Spring内存溢出监听器 -->
	<listener>
		<listener-class>
			org.springframework.web.util.IntrospectorCleanupListener
		</listener-class>
	</listener>
	<!-- 日志记录监听器 -->
	<listener>
		<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
	</listener>
	
	<!-- 配置springmvc -->
	<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:META-INF/spring/spring-mvc.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>encodingFilter</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>forceEncoding</param-name>
			<param-value>true</param-value>
		</init-param>
	</filter>
	<filter-mapping>
			<filter-name>encodingFilter</filter-name>
			<url-pattern>/*</url-pattern>
	</filter-mapping>

  <display-name>Archetype Created Web Application</display-name>
</web-app>

6、在src/main/resources目录下建立META-INF/spring文件夹,在该文件夹下创建applicationContext.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:mvc="http://www.springframework.org/schema/mvc"  
    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/beans   
            http://www.springframework.org/schema/beans/spring-beans-4.3.xsd   
            http://www.springframework.org/schema/mvc   
            http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd   
            http://www.springframework.org/schema/context   
            http://www.springframework.org/schema/context/spring-context-4.3.xsd   
            http://www.springframework.org/schema/aop   
            http://www.springframework.org/schema/aop/spring-aop-4.3.xsd   
            http://www.springframework.org/schema/tx   
            http://www.springframework.org/schema/tx/spring-tx-4.3.xsd "> 

	<!-- 扫描service、dao组件 -->
	<context:component-scan base-package="com.test.ssm" />
	<!-- 分解配置 jdbc.properties -->
	<context:property-placeholder location="classpath:META-INF/properties/jdbc.properties"/>
	
	<!-- 数据源c3p0 -->
	<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
		<property name="driverClass" value="${jdbc.driverClassName}" />  
        <property name="jdbcUrl" value="${jdbc.url}" />  
        <property name="user" value="${jdbc.username}" />  
        <property name="password" value="${jdbc.password}" />  
        <property name="maxPoolSize" value="${c3p0.pool.size.max}" />  
        <property name="minPoolSize" value="${c3p0.pool.size.min}" />  
        <property name="initialPoolSize" value="${c3p0.pool.size.ini}" />  
        <property name="acquireIncrement" value="${c3p0.pool.size.increment}" />
	</bean>
	
	
	<!-- sessionFactory将spring和mybatis整合 -->
	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="dataSource" />
		<property name="configLocation" value="classpath:META-INF/spring/spring-mybatis.xml" />
		<property name="mapperLocations" value="classpath*:META-INF/sqlmap/**/*.xml" />
	</bean>
	<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
		<property name="basePackage" value="com.test.ssm.dao" />
		<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
	</bean>
	
	<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource" ref="dataSource" />
	</bean>
	<tx:advice id="transactionAdvice" transaction-manager="transactionManager">
		<tx:attributes>
			<tx:method name="add*" propagation="REQUIRED" />  
            <tx:method name="append*" propagation="REQUIRED" />  
            <tx:method name="insert*" propagation="REQUIRED" />  
            <tx:method name="save*" propagation="REQUIRED" />  
            <tx:method name="update*" propagation="REQUIRED" />  
            <tx:method name="modify*" propagation="REQUIRED" />  
            <tx:method name="edit*" propagation="REQUIRED" />  
            <tx:method name="delete*" propagation="REQUIRED" />  
            <tx:method name="remove*" propagation="REQUIRED" />  
            <tx:method name="repair" propagation="REQUIRED" />  
            <tx:method name="delAndRepair" propagation="REQUIRED" />  
  
            <tx:method name="get*" propagation="SUPPORTS" />  
            <tx:method name="find*" propagation="SUPPORTS" />  
            <tx:method name="load*" propagation="SUPPORTS" />  
            <tx:method name="search*" propagation="SUPPORTS" />  
            <tx:method name="datagrid*" propagation="SUPPORTS" />  
  
            <tx:method name="*" propagation="SUPPORTS" /> 
		</tx:attributes>
	</tx:advice>
	<aop:config>
		<aop:pointcut id="transactionPointCut" expression="execution(* com.test.ssm.service..*Impl.*(..))" />
		<aop:advisor pointcut-ref="transactionPointCut" advice-ref="transactionAdvice" />
	</aop:config>
</beans>

7、在src/main/resources/META-INF/spring目录下创建spring-mvc.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:p="http://www.springframework.org/schema/p"  
    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-3.2.xsd  
    http://www.springframework.org/schema/context  
    http://www.springframework.org/schema/context/spring-context-3.2.xsd  
    http://www.springframework.org/schema/mvc    
    http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd"> 
    
    <!-- 默认的注解映射的支持 -->
    <mvc:annotation-driven />
    
    <!-- 自动扫描该包,使SpringMVC认为包下用了@Controller注解的类是控制器 -->
    <context:component-scan base-package="com.test.ssm.controller" />
    
    <!-- 避免IE执行AJAX时,返回JSON出现下载文件 -->
    <bean id="mappingJacksonHttpMessageConverter"  
        class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">  
        <property name="supportedMediaTypes">  
            <list>  
                <value>text/html;charset=UTF-8</value>  
            </list>  
        </property>  
    </bean> 
    
    <!-- 定义跳转的文件的前后缀,视图模式配置 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    	<property name="prefix" value="/" />
    	<property name="suffix" value=".jsp" />
    </bean>
    
    <!-- 配置文件上传,如果没有使用文件上传可以不用配置,当然如果不配,那么配置文件中也不必引入上传组件包 -->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> 
    	<!-- 默认编码 -->
    	<property name="defaultEncoding" value="utf-8" />
    	<!-- 文件大小最大值 -->
    	<property name="maxUploadSize" value="10485760000" />
    	<!-- 内存中的最大值 -->
    	<property name="maxInMemorySize" value="40960" />
    </bean>
    
 </beans>

8、在src/main/resources/META-INF/spring目录下创建spring-mybatis.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>  
    <!-- 暂时不需要其他配置-->  
</configuration>  

9、在src/main/resources/META-INF/properties目录下创建log4j.properties文件,文件内容如下:

log4j.rootLogger=info, console, debug, app, error  
  
###Console ###  
log4j.appender.console = org.apache.log4j.ConsoleAppender  
log4j.appender.console.Target = System.out  
log4j.appender.console.layout = org.apache.log4j.PatternLayout  
log4j.appender.console.layout.ConversionPattern = %d %p[%C:%L]- %m%n  
  
### debug ###    
log4j.appender.debug = org.apache.log4j.DailyRollingFileAppender  
log4j.appender.debug.File = log/debug.log  
log4j.appender.debug.Append = true  
log4j.appender.debug.Threshold = DEBUG  
log4j.appender.debug.DatePattern='.'yyyy-MM-dd  
log4j.appender.debug.layout = org.apache.log4j.PatternLayout  
log4j.appender.debug.layout.ConversionPattern = %d %p[%c:%L] - %m%n  
  
### app ###    
log4j.appender.app = org.apache.log4j.DailyRollingFileAppender  
log4j.appender.app.File = log/app.log  
log4j.appender.app.Append = true  
log4j.appender.app.Threshold = INFO  
log4j.appender.app.DatePattern='.'yyyy-MM-dd  
log4j.appender.app.layout = org.apache.log4j.PatternLayout  
log4j.appender.app.layout.ConversionPattern = %d %p[%c:%L] - %m%n  
  
### Error ###  
log4j.appender.error = org.apache.log4j.DailyRollingFileAppender  
log4j.appender.error.File = log/error.log  
log4j.appender.error.Append = true  
log4j.appender.error.Threshold = ERROR   
log4j.appender.error.DatePattern='.'yyyy-MM-dd  
log4j.appender.error.layout = org.apache.log4j.PatternLayout  
log4j.appender.error.layout.ConversionPattern =%d %p[%c:%L] - %m%n 

10、在src/main/resources/META-INF/properties目录下创建jdbc.properties文件,文件内容如下。(此处需要设置你自己的数据库连接方式,不要直接复制,我这里建的数据库名是ssm_data。另外注意第一行最后,也就是Driver的后面不要有空格,不然会报jdbc为空的错误)

jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/ssm_data?useUnicode=true&amp;characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull
jdbc.username=root
jdbc.password=123456
  
c3p0.pool.size.max=20
c3p0.pool.size.min=5
c3p0.pool.size.ini=3
c3p0.pool.size.increment=2

11、使用mybatis generator插件自动生成sql相关文件。
11.1 在你的数据库中建表t_user,注意一定要有个主键,建表sql语句参考如下:

CREATE TABLE "t_user" ("id" int(11) NOT NULL AUTO_INCREMENT,
"name" VARCHAR(32) DEFAULT NULL,
"sex" VARCHAR(32) DEFAULT NULL,
"introduction" VARCHAR(64) DEFAULT NULL,
PRIMARY KEY ("id")) ENGINE=InnoDB DEFAULT CHARSET=utf8;

11.2 在src/main/resources/META-INF目录下新建文件夹sqlmap,在src/main/java目录下新建包com.test.ssm.dao和包com.test.ssm.model

11.3 在src/main/resources/META-INF目录下新建文件generatorConfig.xml(路径和文件名以及需要的jar包和插件已在pom.xml里配置好了,不懂的同学可以查看之前pom.xml里的内容),generatorConfig.xml内容如下:

<?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>
    <!-- 只能有0个或1个 -->
    <!-- <properties resource=""/> -->
    <!-- <properties url=""/> -->
    
    <!-- 可以有0个或多个 -->
    <classPathEntry location="F:/test_repository/mysql/mysql-connector-java/5.1.29/mysql-connector-java-5.1.29.jar" />

    <!-- 1个或多个 -->
    <context id="mysql" targetRuntime="MyBatis3" defaultModelType="flat" >
        <property name="beginningDelimiter" value="`"/>
        <property name="endingDelimiter" value="`"/>

        <!-- <plugin type=""></plugin> -->
        
        <!-- 字段注释:type值需要实现接口org.mybatis.generator.api.CommentGenerator -->
        <commentGenerator>
            <property name="suppressAllComments" value="false" />
            <property name="suppressDate" value="true" />
        </commentGenerator>
        
        <!-- 数据库连接信息 -->
        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                        connectionURL="jdbc:mysql://localhost:3306/ssm_data"
                        userId="root"
                        password="123456">
            <property name="remarkable" value="true"></property>
        </jdbcConnection>

        <!-- 数据类型转换 -->
         <!-- <javaTypeResolver type="com.netfinworks.tool.mybatis.type.MoneyResolverImpl">
            <property name="forceBigDecimals" value="false"/>
            <property name="forceMoney" value="true"/>
            <property name="moneyClumnPattern" value="AMOUNT$"/>
        </javaTypeResolver>  -->
  
        <!-- 定义model存放位置,必须配置一个 -->
        <javaModelGenerator targetPackage="com.test.ssm.model" 
                            targetProject="src\main\java">
            <property name="enableSubPackages" value="true" />
            <property name="trimStrings" value="true" />
        </javaModelGenerator>

        <sqlMapGenerator targetPackage="META-INF/sqlmap"
                         targetProject="src\main\resources">
            <property name="enableSubPackages" value="true" />
        </sqlMapGenerator>

        <!-- DAO接口存放位置 -->
        <javaClientGenerator type="XMLMAPPER"
                             targetPackage="com.test.ssm.dao" 
                             targetProject="src\main\java">
            <property name="enableSubPackages" value="true" />
        </javaClientGenerator>

		<table schema="ssm_data" tableName="t_user" domainObjectName="User"
               enableCountByExample="false" enableUpdateByExample="false"
               enableDeleteByExample="false" enableSelectByExample="false"
               selectByExampleQueryId="false">
        </table>
        

    </context>
</generatorConfiguration> 

11.4 右键项目名–Run As–Run Configurations,运行mysql generator插件。
在这里插入图片描述
点击Apply保存之后,点击Run,插件就开始运行了。插件运行完毕,你的Console窗口会出现运行结果,不报错且显示生成了相关文件并BUILD SUCCESS,证明运行无误。
在这里插入图片描述
同时也可以去src/main/resources/META-INF/sqlmap目录和src/main/java下查看是否有相关文件。(注意:刚生成的文件不会直接显示在eclipse里面,你需要右键项目名–Refresh刷新一下才会有)
在这里插入图片描述

12、构建Service层
12.1 在src/main/java目录下新建com.test.ssm.service包,在包里新建接口UserService.java,内容如下:

package com.test.ssm.service;

import com.test.ssm.model.User;

public interface UserService {
	
	public User getUserById(int id);
	
}

12.2 在src/main/java目录下新建com.test.ssm.service.impl包,在包里新建实现类UserServiceImpl.java实现接口UserService.java,内容如下:

package com.test.ssm.service.impl;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.test.ssm.dao.UserMapper;
import com.test.ssm.model.User;
import com.test.ssm.service.UserService;

@Service
public class UserServiceImpl implements UserService {

	@Autowired
	private UserMapper userMapper;
	
	@Override
	public User getUserById(int id) {
		
		return userMapper.selectByPrimaryKey(id);
		
	}

}

13、构建Controller层
在src/main/java目录下新建包com.test.ssm.controller,在包里新建类UserController.java,文件内容如下:

package com.test.ssm.controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import com.test.ssm.model.User;
import com.test.ssm.service.UserService;

@Controller
public class UserController {
	
	private Logger log = Logger.getLogger(UserController.class);
	
	@Autowired
	private UserService userService;
	
	@RequestMapping("/showUser")
	public ModelAndView getUser(HttpSession session, HttpServletRequest request) {
		log.info("获取用户信息");
		ModelAndView mv = new ModelAndView();
		
		User user = userService.getUserById(1);
		mv.addObject("user", user);
		mv.setViewName("/page/user");
		
		return mv;
	}

}

该类中的@RequestMapping("/showUser")指的是外部访问资源路径,mv.setViewName("/page/showUser");指的是映射到src/main/webapp/page/user.jsp文件。另外,为了对应User user = userService.getUserById(1);该语句能查询出结果,需要向数据库的t_user表插入一条数据,参考sql语句如下:

INSERT INTO t_user VALUES(1, '小明', '男', '我要上清华!');

14、构建视图层
此处的视图层比较简单,仅给大家做个示例,看前台如何通过EL语法获取后台传递的数据。在src/main/webapp目录下新建文件夹page,在page下面新建文件user.jsp,文件内容如下:

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta charset="utf-8">
<title>这就是我</title>
</head>
<body>
	<p>我的名字是:<b>${user.name}</b></p>
	<p>性别:<b>${user.sex}</b></p>
	<p>我的人生宣言:<b>${user.introduction}</b></p>
</body>
</html>

15、至此,我们所有示例代码都写好了,如下是完整目录。同学们可以对照这幅图看自己的文件是否齐全,文件路径是否正确,不然会出现各种文件找不到的问题(这项目名上可能会有红叉,不用管它,我觉得是eclipse抽风)。
在这里插入图片描述

16、运行代码
16.1 清除上次编译内容:右键项目名–Run As–Maven clean,查看Console
在这里插入图片描述

16.2 编译代码并打包:右键项目名–Run As–Maven install,查看Console
在这里插入图片描述
16.3 在tomcat上运行代码:右键项目名–Run As–Run On Server
在这里插入图片描述
在这里插入图片描述
和之前运行一样,Console不报错并打印出Server startup in *** ms或者出现“Hello World!”页面,证明服务正常启动。
在这里插入图片描述

17、浏览器验证
我们在浏览器输入网址http://localhost/ssm-base/showUser查看页面:
在这里插入图片描述
页面正常并显示出我们存入数据库的内容,则说明我们已完成了ssm三大框架整合以及数据从存储、取出到显示在页面的整个流程。有什么其他需求可以在此基础上添加。
如果出现了404报错,请检查tomcat端口是否为默认的80端口。

猜你喜欢

转载自blog.csdn.net/weixin_37753627/article/details/83901692
今日推荐