從零開始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等檔案)。
二、預安裝程式
- Jdk 1.7
- eclipse(注意jdk版本和eclipse版本的匹配,高版本eclipse不支援低版本jdk。我用的是從官網下載的eclipse-jee-mars-R-win32-x86_64版本,只支援jdk1.7以上版本)
- tomcat(同樣注意和jdk版本匹配問題。我用的是7.0.82版本)
- maven(我用的是3.2.1版本)
- 遠端maven庫使用阿里雲的庫,配置相關setting.xml檔案(具體配置後面會介紹)。
- 資料庫(我用的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&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埠。