1. 程式人生 > >簡單的SSM(Spring+SpringMVC+Mybatis)專案搭建

簡單的SSM(Spring+SpringMVC+Mybatis)專案搭建

SSM(Spring+SpringMVC+MyBatis)框架集由Spring、SpringMVC、MyBatis三個開源框架整合而成,常作為資料來源較簡單的web專案的框架。

spring是一個輕量級的控制反轉(IoC)和麵向切面(AOP)的容器框架。

SpringMVC分離了控制器、模型物件、分派器以及處理程式物件的角色,這種分離讓它們更容易進行定製。

MyBatis是一個支援普通SQL查詢,儲存過程和高階對映的優秀持久層框架。

頁面傳送請求給控制器,控制器呼叫業務層處理邏輯,邏輯層向持久層傳送請求,持久層與資料庫互動,後將結果返回給業務層,業務層將處理邏輯傳送給控制器,控制器再呼叫檢視展現資料。

1.首先新建一個Maven的專案

開啟Eclipse,右鍵new—>other,如下圖找到maven project點選next。

專案建立完成。以下是專案結構:

此時pom.xml檔案報錯,檢視原因:

解決方法:右鍵Deployment Descriptor:toolapi 選擇Generate Deployment Descriptor Stub

問題解決,你會發現目錄中webapp下多了web.xml檔案。如下圖:

2.修改pom.xml檔案,加入Spring,SpringMVC,MyBatis的依賴。

如果複製貼上記得替換自己的專案名等資訊。可以全域性替換,搜尋com.mgkj.toolapi,toolapi 全域性替換成相應的名稱。

以下是pom.xml檔案程式碼展示:

<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/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.mgkj.toolapi</groupId>
	<artifactId>toolapi</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>war</packaging>

	<url>http://maven.apache.org</url>
	<properties>
		<!-- spring版本號 -->
		<spring.version>4.3.6.RELEASE</spring.version>
		<!-- mybatis版本號 -->
		<mybatis.version>3.4.2</mybatis.version>
		<!-- log4j日誌檔案管理包版本 -->
		<slf4j.version>1.7.22</slf4j.version>
		<log4j.version>1.2.17</log4j.version>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	</properties>
	<repositories>
		<repository>
			<id>nexus-repository</id>
			<name>MavenMirror</name>
			<url>http://maven.aliyun.com/nexus/content/groups/public//</url>
			<releases>
				<enabled>true</enabled>
			</releases>
			<snapshots>
				<enabled>true</enabled>
			</snapshots>
		</repository>
		<repository>
			<id>java</id>
			<name>java official repository</name>
			<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
		</repository>
	</repositories>
	<!-- 配置部署的遠端倉庫 -->
	<distributionManagement>
		<snapshotRepository>
			<id>nexus-snapshots</id>
			<name>nexus distribution snapshot repository</name>
			<url>http://maven.aliyun.com/nexus/content/groups/public//</url>
		</snapshotRepository>
	</distributionManagement>
	<dependencies>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.12</version>
			<!-- 表示開發的時候引入,釋出的時候不會載入此包 -->
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.aspectj</groupId>
			<artifactId>aspectjweaver</artifactId>
			<version>1.8.10</version>
		</dependency>
		<dependency>
			<groupId>com.fasterxml.jackson.core</groupId>
			<artifactId>jackson-core</artifactId>
			<version>2.9.0.pr2</version>
		</dependency>
		<dependency>
			<groupId>com.fasterxml.jackson.core</groupId>
			<artifactId>jackson-databind</artifactId>
			<version>2.9.0.pr2</version>
		</dependency>
		<dependency>
			<groupId>com.fasterxml.jackson.core</groupId>
			<artifactId>jackson-annotations</artifactId>
			<version>2.9.0.pr2</version>
		</dependency>
		<!-- spring核心包 -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-core</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-beans</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-web</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-oxm</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.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-orm</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-aop</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context-support</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-test</artifactId>
			<version>${spring.version}</version>
		</dependency>

		<!-- mybatis核心包 -->
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis</artifactId>
			<version>${mybatis.version}</version>
		</dependency>
		<!-- mybatis/spring包 -->
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis-spring</artifactId>
			<version>1.3.1</version>
		</dependency>
		<!-- 匯入Mysql資料庫連結jar包 -->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>5.1.40</version>
		</dependency>
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>druid</artifactId>
			<version>1.0.28</version>
		</dependency>
		<!-- 匯入dbcp的jar包,用來在applicationContext.xml中配置資料庫 -->
		<dependency>
			<groupId>commons-dbcp</groupId>
			<artifactId>commons-dbcp</artifactId>
			<version>1.4</version>
		</dependency>
		<!-- Redis 相關依賴 -->
		<dependency>
			<groupId>org.springframework.data</groupId>
			<artifactId>spring-data-redis</artifactId>
			<version>1.6.0.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>org.apache.commons</groupId>
			<artifactId>commons-pool2</artifactId>
			<version>2.2</version>
		</dependency>
		<dependency>
			<groupId>redis.clients</groupId>
			<artifactId>jedis</artifactId>
			<version>2.8.0</version>
		</dependency>
		<!-- httpclient -->
		<dependency>
			<groupId>org.apache.httpcomponents</groupId>
			<artifactId>httpclient</artifactId>
			<version>4.5.2</version>
		</dependency>
		<!-- JSTL標籤類 -->
		<dependency>
			<groupId>jstl</groupId>
			<artifactId>jstl</artifactId>
			<version>1.2</version>
		</dependency>
		<!-- 日誌檔案管理包 -->
		<!-- log start -->
		<dependency>
			<groupId>log4j</groupId>
			<artifactId>log4j</artifactId>
			<version>${log4j.version}</version>
		</dependency>
		<!-- 格式化物件,方便輸出日誌 -->
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>fastjson</artifactId>
			<version>1.2.24</version>
		</dependency>
		<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>
		<!-- log end -->
		<!-- 映入JSON -->
		<dependency>
			<groupId>org.codehaus.jackson</groupId>
			<artifactId>jackson-mapper-asl</artifactId>
			<version>1.9.13</version>
		</dependency>
		<!-- 上傳元件包 -->
		<dependency>
			<groupId>commons-fileupload</groupId>
			<artifactId>commons-fileupload</artifactId>
			<version>1.3.1</version>
		</dependency>
		<dependency>
			<groupId>commons-io</groupId>
			<artifactId>commons-io</artifactId>
			<version>2.4</version>
		</dependency>

		<dependency>
			<groupId>commons-codec</groupId>
			<artifactId>commons-codec</artifactId>
			<version>1.9</version>
		</dependency>
		<dependency>
			<groupId>org.freemarker</groupId>
			<artifactId>freemarker</artifactId>
			<version>2.3.25-incubating</version>
		</dependency>
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>javax.servlet-api</artifactId>
			<version>4.0.0-b05</version>
		</dependency>
		<dependency>
			<groupId>javax.servlet.jsp</groupId>
			<artifactId>javax.servlet.jsp-api</artifactId>
			<version>2.3.2-b02</version>
		</dependency>
		<dependency>
			<version>2.0.0.Alpha1</version>
			<groupId>javax.validation</groupId>
			<artifactId>validation-api</artifactId>
		</dependency>
		<dependency>
			<version>5.4.0.Final</version>
			<groupId>org.hibernate</groupId>
			<artifactId>hibernate-validator</artifactId>
		</dependency>
		<dependency>
			<groupId>org.mybatis.generator</groupId>
			<artifactId>mybatis-generator-core</artifactId>
			<version>1.3.5</version>
		</dependency>
		<dependency>
			<groupId>org.activiti</groupId>
			<artifactId>activiti-spring</artifactId>
			<version>5.22.0</version>
		</dependency>
		<dependency>
			<groupId>org.json</groupId>
			<artifactId>json</artifactId>
			<version>20140107</version>
		</dependency>
		<dependency>
			<groupId>com.github.pagehelper</groupId>
			<artifactId>pagehelper</artifactId>
			<version>4.1.6</version>
		</dependency>
		<!-- dubbo整合 -->
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>dubbo</artifactId>
			<version>2.5.3</version>
			<!--去除引入的spring -->
			<exclusions>
				<exclusion>
					<groupId>org.springframework</groupId>
					<artifactId>spring</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
		<dependency>
			<groupId>org.apache.zookeeper</groupId>
			<artifactId>zookeeper</artifactId>
			<version>3.4.6</version>
		</dependency>
		<dependency>
			<groupId>com.github.sgroschupf</groupId>
			<artifactId>zkclient</artifactId>
			<version>0.1</version>
		</dependency>


		<!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
		<dependency>
			<groupId>org.apache.poi</groupId>
			<artifactId>poi</artifactId>
			<version>3.14</version>
		</dependency>

		<!-- https://mvnrepository.com/artifact/com.opensymphony/xwork -->
		<dependency>
			<groupId>com.opensymphony</groupId>
			<artifactId>xwork</artifactId>
			<version>2.1.3</version>
		</dependency>

		<dependency>
			<groupId>org.apache.poi</groupId>
			<artifactId>poi-scratchpad</artifactId>
			<version>3.14</version>
		</dependency>

		<dependency>
			<groupId>org.apache.poi</groupId>
			<artifactId>poi-ooxml</artifactId>
			<version>3.14</version>
		</dependency>

		<!-- https://mvnrepository.com/artifact/net.sourceforge.jexcelapi/jxl -->
		<dependency>
			<groupId>net.sourceforge.jexcelapi</groupId>
			<artifactId>jxl</artifactId>
			<version>2.6.12</version>
		</dependency>

		<!-- https://mvnrepository.com/artifact/io.netty/netty -->
		<dependency>
			<groupId>io.netty</groupId>
			<artifactId>netty</artifactId>
			<version>3.10.5.Final</version>
		</dependency>
		<dependency>
			<groupId>org.javassist</groupId>
			<artifactId>javassist</artifactId>
			<version>3.20.0-GA</version>
		</dependency>
		<dependency>
			<artifactId>ehcache</artifactId>
			<groupId>net.sf.ehcache</groupId>
			<version>2.7.2</version>
		</dependency>
		<dependency>
			<groupId>cglib</groupId>
			<artifactId>cglib-nodep</artifactId>
			<version>2.2.2</version>
		</dependency>
	</dependencies>
	<build>
		<finalName>tool</finalName>

		<defaultGoal>compile</defaultGoal>

		<plugins>
			<plugin>
				<groupId>org.mybatis.generator</groupId>
				<artifactId>mybatis-generator-maven-plugin</artifactId>
				<version>1.3.5</version>
				<configuration>
					<verbose>true</verbose>
					<overwrite>true</overwrite>
				</configuration>
			</plugin>
			<plugin>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>3.3</version>
				<configuration>
					<source>1.7</source>
					<target>1.7</target>
					<encoding>UTF-8</encoding>
					<compilerArguments>
						<extdirs>src\main\webapp\WEB-INF\lib</extdirs>
					</compilerArguments>
				</configuration>
			</plugin>
		</plugins>
	</build>
</project>

3.新增好專案依賴後,專案報錯:解決方法, 右鍵專案,選擇Maven->Update project

4.新增專案配置檔案,在src/main/resources中新增一些必要配置檔案。如果貼上程式碼請改自己對應的專案名。

4.1 httpclient.properties

http.maxTotal=200  
http.defaultMaxPerRoute=50  
http.connectTimeout=5000  
http.connectionRequestTimeout=500  
http.socketTimeout=30000  
http.staleConnectionCheckEnabled=true 

4.2 jdbc.properties

jdbc_driverClassName=com.mysql.jdbc.Driver
jdbc_url1=此處填寫連結資料庫ip地址+埠號
jdbc_url3=?useUnicode=true&amp;characterEncoding=UTF-8&amp;allowMultiQueries=true
jdbc_username=此處是連結資料庫使用者名稱
jdbc_password=此處是連結資料庫密碼
jdbc_initialSize=1
jdbc_maxActive=20
jdbc_maxIdle=5
jdbc_minIdle=1
jdbc_maxWait=10000

4.3 log4j.properties

log4j.rootLogger=DEBUG,Console,File

log4j.logger.org.apache.shiro=DEBUG
log4j.logger.net.sf.ehcache=DEBUG
log4j.logger.org.apache.test=DEBUG
log4j.logger.org.springframework=DEBUG

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=[%c]%m%n

log4j.appender.File=org.apache.log4j.RollingFileAppender 
log4j.appender.File.File=E:\\gcx_tool_api.log
log4j.appender.File.MaxFileSize=10MB
log4j.appender.File.Threshold=ALL
log4j.appender.File.layout=org.apache.log4j.PatternLayout
log4j.appender.File.layout.ConversionPattern=[%p][%d{yyyy-MM-dd HH\:mm\:ss,SSS}][%c]%m%n

4.4 param.properties

project_name=tool

4.5 spring-httpclient.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:aop="http://www.springframework.org/schema/aop"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
	http://www.springframework.org/schema/beans/spring-beans-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
	">

	<!-- 定義連線管理器 -->
	<bean id="httpClientConnectionManager"
		class="org.apache.http.impl.conn.PoolingHttpClientConnectionManager"
		destroy-method="close">
		<!-- 最大連線數 -->
		<property name="maxTotal" value="${http.maxTotal}" />

		<!-- 設定每個主機地址的併發數 -->
		<property name="defaultMaxPerRoute" value="${http.defaultMaxPerRoute}" />
	</bean>

	<!-- httpclient物件構建器 -->
	<bean id="httpClientBuilder" class="org.apache.http.impl.client.HttpClientBuilder">
		<!-- 設定連線管理器 -->
		<property name="connectionManager" ref="httpClientConnectionManager" />
	</bean>

	<!-- 定義Httpclient物件 -->
	<bean id="httpClient" class="org.apache.http.impl.client.CloseableHttpClient"
		factory-bean="httpClientBuilder" factory-method="build" scope="prototype">
	</bean>

	<bean id="requestConfigBuilder" class="org.apache.http.client.config.RequestConfig.Builder">
		<!-- 建立連線的最長時間 -->
		<property name="connectTimeout" value="${http.connectTimeout}" />
		<!-- 從連線池中獲取到連線的最長時間 -->
		<property name="connectionRequestTimeout" value="${http.connectionRequestTimeout}" />
		<!-- 資料傳輸的最長時間 -->
		<property name="socketTimeout" value="${http.socketTimeout}" />
		<!-- 提交請求前測試連線是否可用 -->
		<property name="staleConnectionCheckEnabled" value="${http.staleConnectionCheckEnabled}" />
	</bean>
	<!-- 定義請求引數 -->
	<bean id="requestConfig" class="org.apache.http.client.config.RequestConfig"
		factory-bean="requestConfigBuilder" factory-method="build">
	</bean>
</beans>

4.6 spring-mvc.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	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:aop="http://www.springframework.org/schema/aop"
	xmlns:task="http://www.springframework.org/schema/task"
	xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-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/task http://www.springframework.org/schema/task/spring-task-4.3.xsd
		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">
		<context:property-placeholder location="classpath:param.properties" />
    <mvc:annotation-driven />
     
	<!-- <mvc:annotation-driven     validator="validator" /> -->
	<aop:aspectj-autoproxy proxy-target-class="true"/>
     <!--  通知spring容器通過註解的方式裝配bean --> 
      <context:annotation-config /> 
      <!-- 自動掃描該包,使SpringMVC認為包下用了@controller註解的類是控制器 -->  
    <context:component-scan base-package="com.mgkj.tool.controller" />  
    <!--避免IE執行AJAX時,返回JSON出現下載檔案 -->  
    <bean id="mappingJacksonHttpMessageConverter"  
        class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">  
        <property name="supportedMediaTypes">  
            <list>  
                <value>text/html;charset=UTF-8</value>  
            </list>  
        </property>  
    </bean>  
    <!-- 啟動SpringMVC的註解功能,完成請求和註解POJO的對映 -->  
    <bean  
        class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">  
        <property name="messageConverters">  
            <list>  
                <ref bean="mappingJacksonHttpMessageConverter" /> <!-- JSON轉換器 --> 
            </list>  
        </property>  
    </bean>  
    	
    	<!-- 攔截器配置  -->
		<mvc:interceptors>
			<mvc:interceptor>
				<mvc:mapping path="/**"/>
				<bean class="com.mgkj.tool.inter.LogInterceptor"/>
			</mvc:interceptor>
		</mvc:interceptors>
 
    <!-- 定義跳轉的檔案的前後綴 ,檢視模式配置-->  
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">  
        <!-- 這裡的配置我的理解是自動給後面action的方法return的字串加上字首和字尾,變成一個 可用的url地址 -->  
        <property name="prefix" value="/WEB-INF/" />  
        <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>

4.7 spring-mybatis.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:aop="http://www.springframework.org/schema/aop"
	xsi:schemaLocation="
http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans-4.3.xsd 
http://www.springframework.org/schema/tx 
http://www.springframework.org/schema/tx/spring-tx-4.3.xsd
http://www.springframework.org/schema/aop 
http://www.springframework.org/schema/aop/spring-aop-4.3.xsd">

	<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
		destroy-method="close">
		<property name="driverClassName" value="${jdbc_driverClassName}" />
		<property name="url" value="${jdbc_url1}${project_name}${jdbc_url3}" />
		<property name="username" value="${jdbc_username}" />
		<property name="password" value="${jdbc_password}" />
		<!-- 初始化連線大小 -->
		<property name="initialSize" value="${jdbc_initialSize}"></property>
		<!-- 連線池最大數量 -->
		<property name="maxActive" value="${jdbc_maxActive}"></property>
		<!-- 連線池最大空閒 -->
		<property name="maxIdle" value="${jdbc_maxIdle}"></property>
		<!-- 連線池最小空閒 -->
		<property name="minIdle" value="${jdbc_minIdle}"></property>
		<!-- 獲取連線最大等待時間 -->
		<property name="maxWait" value="${jdbc_maxWait}"></property>
	</bean>
	<!-- spring和MyBatis完美整合,不需要mybatis的配置對映檔案 -->
	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="dataSource" />
		<!-- 自動掃描mapping.xml檔案 -->
		<property name="mapperLocations"
			value="classpath:com/mgkj/${project_name}/mapping/*.xml"></property>
	</bean>

	<!-- DAO介面所在包名,Spring會自動查詢其下的類 -->
	<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
		<property name="basePackage" value="com.mgkj.*.dao" />
		<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
	</bean>

	<!-- (事務管理)transaction manager, use JtaTransactionManager for global tx -->
	<bean id="transactionManager"
		class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource" ref="dataSource" />
	</bean>
</beans>

4.8 spring.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:aop="http://www.springframework.org/schema/aop" xmlns:task="http://www.springframework.org/schema/task"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
	http://www.springframework.org/schema/beans/spring-beans-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/task  
     http://www.springframework.org/schema/task/spring-task-4.3.xsd">
 
	<!-- 引入屬性檔案 -->
	<context:property-placeholder
		location="classpath:jdbc.properties,classpath:param.properties,classpath:httpclient.properties" />
 
	<import resource="spring-mybatis.xml" />
	<!-- 自動掃描(自動注入) -->
	<context:component-scan base-package="com.mgkj.*.service..*" />
 
	<!-- 引入httpclient配置 -->
	<import resource="spring-httpclient.xml" />
 
	<!-- 引入任務排程器 -->
	<task:annotation-driven/>
 
</beans>

新增完成:

5.建立專案結構目錄

6.配置web.xml    如果複製程式碼,請改對應的專案名稱

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1">
  <display-name>toolapi</display-name>
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:spring.xml;classpath:spring-mybatis.xml</param-value>
  </context-param>
  <context-param>
    <param-name>spring.profiles.active</param-name>
    <param-value>dev</param-value>
  </context-param>
  <context-param>
    <param-name>spring.profiles.default</param-name>
    <param-value>dev</param-value>
  </context-param>
  <context-param>
    <param-name>spring.liveBeansView.mbeanDomain</param-name>
    <param-value>dev</param-value>
  </context-param>
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  <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>
  </filter>
  <filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
  <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*:spring-mvc.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>SpringMVC</servlet-name>
    <url-pattern>*.do</url-pattern>
  </servlet-mapping>
  <welcome-file-list>
    <welcome-file>/index.jsp</welcome-file>
    <welcome-file>/index.html</welcome-file>
  </welcome-file-list>
</web-app>

7.專案配置完成,下面建立資料庫,新建一張資料庫表:案例中資料庫名稱為tool,表名為SGM_TEST

以下是建表語句,包含三條測試資料:

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for `SGM_TEST`
-- ----------------------------
DROP TABLE IF EXISTS `SGM_TEST`;
CREATE TABLE `SGM_TEST` (
  `ID` int(50) NOT NULL AUTO_INCREMENT COMMENT '主鍵自增ID',
  `INSERT_TIME` datetime DEFAULT NULL,
  `PUBLISH_TIME` datetime DEFAULT NULL,
  `SQFB_TIME` datetime DEFAULT NULL,
  `SJFS_TIME` datetime DEFAULT NULL,
  `DELETE_FLAG` int(1) DEFAULT '0',
  `STATE` int(10) DEFAULT '0',
  `TITLE` varchar(255) DEFAULT NULL,
  `PROVINCE` varchar(255) DEFAULT NULL,
  `PROVINCE_ID` varchar(255) DEFAULT NULL,
  `CITY` varchar(255) DEFAULT NULL,
  `CITY_ID` varchar(255) DEFAULT NULL,
  `TYPE` varchar(255) DEFAULT NULL,
  `CLASSIFY` varchar(255) DEFAULT NULL,
  `LAIYUAN` varchar(255) DEFAULT NULL,
  `CONTENT` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;

-- ----------------------------
-- Records of SGM_TEST
-- ----------------------------
INSERT INTO `SGM_TEST` VALUES ('12', '2018-08-09 13:38:10', null, null, '2018-08-09 00:00:00', '0', '0', '標題測試1', '吉林省', null, '長春市', null, '文章型別測試1', '內容分類測試1', '來源測試1', '內容測試1');
INSERT INTO `SGM_TEST` VALUES ('14', '2018-08-09 13:38:11', null, null, '2018-08-11 00:00:00', '0', '0', '標題測試3', '四川省', null, '攀枝花市', null, '文章型別測試3', '內容分類測試3', '來源測試3', '內容測試3');
INSERT INTO `SGM_TEST` VALUES ('15', '2018-08-09 13:38:11', null, null, '2018-08-12 00:00:00', '0', '0', '標題測試4', '吉林省', null, '圖們市', null, '文章型別測試4', '內容分類測試4', '來源測試4', '內容測試4');

8.完成測試介面:

8.1 以下是測試介面所有檔案結構:

8.2 SgmTestController

package com.mgkj.tool.controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.mgkj.tool.service.SgmTestService;
import com.mgkj.tool.service.util.MyResult;

/** 
 * @author sunguimin
 * @version 建立時間:2018-08-10 16:21:37 
 */
@Controller
@RequestMapping("sgmTestController")
public class SgmTestController {

	@Autowired
	SgmTestService sgmTestService;

	//前臺展示
	@RequestMapping("showList")
	@ResponseBody
	public MyResult<Object> showList(HttpServletRequest request,HttpServletResponse response){
		MyResult<Object> result = sgmTestService.showList(request,response);
		return result;
	}


}

8.3 SgmTestMapper

package com.mgkj.tool.dao;

import java.util.List;

import com.mgkj.tool.model.SgmTest;

public interface SgmTestMapper{

	List<SgmTest> findByRecord();

}

8.4 LogInterceptor

package com.mgkj.tool.inter;
import java.io.IOException;
/** 
 * @author	Min 
 * @version 建立時間:2017年7月4日 上午11:53:14 
 * 類說明:	
 */
import java.text.SimpleDateFormat;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.NamedThreadLocal;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import com.alibaba.fastjson.JSON;
//import com.mgkj.tool.service.impl.CommonImpl;
import com.mgkj.tool.service.impl.HttpClientService;
//import com.mgkj.tool.service.util.User;
import com.mgkj.tool.util.UUIDUtils;

public class LogInterceptor /*extends CommonImpl*/ implements HandlerInterceptor {

	
	private final Logger log = LoggerFactory.getLogger(getClass().getName());

	private static final ThreadLocal<Long> startTimeThreadLocal = new NamedThreadLocal<Long>("ThreadLocal StartTime");
	
	@Value("${project_name}")
	String project_name;
	
	@Autowired
	HttpClientService httpClientService;
	
	
	/** 
	 * 預處理
	 */

	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

		long beginTime = System.currentTimeMillis(); //開始時間 

		startTimeThreadLocal.set(beginTime); //執行緒繫結變數(該資料只有當前請求的執行緒可見) 

		log.info("開始計時: {}", new SimpleDateFormat("hh:mm:ss.SSS").format(beginTime));

		return true;
	}

	/**
	 * 返回處理
	 */

	@Override
	public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {

		if (modelAndView != null){

			log.info("ViewName: " + modelAndView.getViewName());

		}

	}

	/**
	 * 後處理
	 */

	@Override
	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {

		//輸出日誌資訊
		
		log.info("訪問地址:" + request.getRequestURI() + ",執行方式:" + request.getMethod());

		long beginTime = startTimeThreadLocal.get(); //得到執行緒繫結的區域性變數(開始時間) 

		long endTime = System.currentTimeMillis(); //結束時間 

		log.info("計時結束:{}", new SimpleDateFormat("hh:mm:ss.SSS").format(endTime)); 

		// 儲存日誌   
		//獲取請求引數
		Map<String, Object> map = new HashMap<>();
		Enumeration<String> keys = request.getParameterNames();
		while(keys.hasMoreElements()) {
		    String k = keys.nextElement();
		    String v = request.getParameter(k);
		    map.put(k, v);
		} 
		String json = JSON.toJSONString(map);
		
		//請求的IP    
		String ip = request.getRemoteAddr();  
		//使用者
		//User user = getUser(request, response);
		
		Map<String, String> params = new HashMap<String, String>();
		params.put("id", UUIDUtils.createUuid());
		params.put("logSystem", project_name);
		params.put("logIp", ip);
		params.put("logUri", request.getRequestURI());
		params.put("logMethod", request.getMethod());
		params.put("logParameters", json);
		params.put("logStartTime", beginTime+"");
		params.put("logEndTime", endTime+"");
		params.put("logUseTime", (endTime - beginTime)+"");
		
	}
}

8.5 SgmTestMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.mgkj.tool.dao.SgmTestMapper">
	<resultMap id="BaseResultMap" type="com.mgkj.tool.model.SgmTest">
		<id column="ID" property="id" jdbcType="INTEGER" />
		<result column="INSERT_TIME" property="insertTime" jdbcType="TIMESTAMP" />
		<result column="PUBLISH_TIME" property="publishTime" jdbcType="TIMESTAMP" />
		<result column="SQFB_TIME" property="sqfbTime" jdbcType="TIMESTAMP" />
		<result column="SJFS_TIME" property="sjfsTime" jdbcType="TIMESTAMP" />
		<result column="DELETE_FLAG" property="deleteFlag" jdbcType="INTEGER" />
		<result column="STATE" property="state" jdbcType="INTEGER" />
		<result column="TITLE" property="title" jdbcType="VARCHAR" />
		<result column="PROVINCE" property="province" jdbcType="VARCHAR" />
		<result column="PROVINCE_ID" property="provinceId" jdbcType="VARCHAR" />
		<result column="CITY" property="city" jdbcType="VARCHAR" />
		<result column="CITY_ID" property="cityId" jdbcType="VARCHAR" />
		<result column="TYPE" property="type" jdbcType="VARCHAR" />
		<result column="CLASSIFY" property="classify" jdbcType="VARCHAR" />
		<result column="LAIYUAN" property="laiyuan" jdbcType="VARCHAR" />
		<result column="CONTENT" property="content" jdbcType="VARCHAR" />
	</resultMap>

	<sql id="Base_Column_List">
		ID, 
		INSERT_TIME, 
		PUBLISH_TIME, 
		SQFB_TIME, 
		SJFS_TIME, 
		DELETE_FLAG, 
		STATE, 
		TITLE, 
		PROVINCE, 
		PROVINCE_ID, 
		CITY, 
		CITY_ID, 
		TYPE, 
		CLASSIFY, 
		LAIYUAN, 
		CONTENT
	</sql>

	<sql id="Common_Where_List">
		<if test='record.id != null '>
		and ID = #{record.id,jdbcType=INTEGER} </if>
		<if test='record.insertTime != null '>
		and INSERT_TIME = #{record.insertTime,jdbcType=TIMESTAMP} </if>
		<if test='record.publishTime != null '>
		and PUBLISH_TIME = #{record.publishTime,jdbcType=TIMESTAMP} </if>
		<if test='record.sqfbTime != null '>
		and SQFB_TIME = #{record.sqfbTime,jdbcType=TIMESTAMP} </if>
		<if test='record.sjfsTime != null '>
		and SJFS_TIME = #{record.sjfsTime,jdbcType=TIMESTAMP} </if>
		<if test='record.deleteFlag != null '>
		and DELETE_FLAG = #{record.deleteFlag,jdbcType=INTEGER} </if>
		<if test='record.state != null '>
		and STATE = #{record.state,jdbcType=INTEGER} </if>
		<if test='record.title != null and record.title != "" '>
		and TITLE = #{record.title,jdbcType=VARCHAR} </if>
		<if test='record.province != null and record.province != "" '>
		and PROVINCE = #{record.province,jdbcType=VARCHAR} </if>
		<if test='record.provinceId != null and record.provinceId != "" '>
		and PROVINCE_ID = #{record.provinceId,jdbcType=VARCHAR} </if>
		<if test='record.city != null and record.city != "" '>
		and CITY = #{record.city,jdbcType=VARCHAR} </if>
		<if test='record.cityId != null and record.cityId != "" '>
		and CITY_ID = #{record.cityId,jdbcType=VARCHAR} </if>
		<if test='record.type != null and record.type != "" '>
		and TYPE = #{record.type,jdbcType=VARCHAR} </if>
		<if test='record.classify != null and record.classify != "" '>
		and CLASSIFY = #{record.classify,jdbcType=VARCHAR} </if>
		<if test='record.laiyuan != null and record.laiyuan != "" '>
		and LAIYUAN = #{record.laiyuan,jdbcType=VARCHAR} </if>
		<if test='record.content != null and record.content != "" '>
		and CONTENT = #{record.content,jdbcType=VARCHAR} </if>
	</sql>

	<select id="findByRecord" resultMap="BaseResultMap">
		select
		<include refid='Base_Column_List' />
		from SGM_TEST
	</select>

</mapper>

8.6 SgmTest

package com.mgkj.tool.model;
import java.util.Date;

import org.springframework.format.annotation.DateTimeFormat;


public class SgmTest {

	private Integer id;// 主鍵自增ID

	@DateTimeFormat(pattern = "yyyy-MM-dd")
	private Date insertTime;// 

	@DateTimeFormat(pattern = "yyyy-MM-dd")
	private Date publishTime;// 

	@DateTimeFormat(pattern = "yyyy-MM-dd")
	private Date sqfbTime;// 

	@DateTimeFormat(pattern = "yyyy-MM-dd")
	private Date sjfsTime;// 

	private Integer deleteFlag;// 

	private Integer state;// 

	private String title;// 

	private String province;// 

	private String provinceId;// 

	private String city;// 

	private String cityId;// 

	private String type;// 

	private String classify;// 

	private String laiyuan;// 

	private String content;// 


	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}	

	public Date getInsertTime() {
		return insertTime;
	}

	public void setInsertTime(Date insertTime) {
		this.insertTime = insertTime;
	}	

	public Date getPublishTime() {
		return publishTime;
	}

	public void setPublishTime(Date publishTime) {
		this.publishTime = publishTime;
	}	

	public Date getSqfbTime() {
		return sqfbTime;
	}

	public void setSqfbTime(Date sqfbTime) {
		this.sqfbTime = sqfbTime;
	}	

	public Date getSjfsTime() {
		return sjfsTime;
	}

	public void setSjfsTime(Date sjfsTime) {
		this.sjfsTime = sjfsTime;
	}	

	public Integer getDeleteFlag() {
		return deleteFlag;
	}

	public void setDeleteFlag(Integer deleteFlag) {
		this.deleteFlag = deleteFlag;
	}	

	public Integer getState() {
		return state;
	}

	public void setState(Integer state) {
		this.state = state;
	}	

	public String getTitle() {
		return title;
	}

	public void setTitle(String title) {
		this.title = title == null ? null : title.trim();
	}	

	public String getProvince() {
		return province;
	}

	public void setProvince(String province) {
		this.province = province == null ? null : province.trim();
	}	

	public String getProvinceId() {
		return provinceId;
	}

	public void setProvinceId(String provinceId) {
		this.provinceId = provinceId == null ? null : provinceId.trim();
	}	

	public String getCity() {
		return city;
	}

	public void setCity(String city) {
		this.city = city == null ? null : city.trim();
	}	

	public String getCityId() {
		return cityId;
	}

	public void setCityId(String cityId) {
		this.cityId = cityId == null ? null : cityId.trim();
	}	

	public String getType() {
		return type;
	}

	public void setType(String type) {
		this.type = type == null ? null : type.trim();
	}	

	public String getClassify() {
		return classify;
	}

	public void setClassify(String classify) {
		this.classify = classify == null ? null : classify.trim();
	}	

	public String getLaiyuan() {
		return laiyuan;
	}

	public void setLaiyuan(String laiyuan) {
		this.laiyuan = laiyuan == null ? null : laiyuan.trim();
	}	

	public String getContent() {
		return content;
	}

	public void setContent(String content) {
		this.content = content == null ? null : content.trim();
	}	




}

8.7 HttpClientService

package com.mgkj.tool.service.impl;
/** 
 * @author	Min 
 * @version 建立時間:2017年6月20日 下午2:39:12 
 * 類說明:	
 */
import java.io.IOException;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.mgkj.tool.service.util.HttpResult;

  
@Service  
public class HttpClientService {  
  
    @Autowired  
    private CloseableHttpClient httpClient;  
    @Autowired  
    private RequestConfig requestConfig;  
  
    /** 
     * 執行GET請求 
     *  
     * @param url 
     * @return 
     * @throws IOException 
     * @throws ClientProtocolException 
     */  
    public String doGet(String url) throws ClientProtocolException, IOException {  
        // 建立http GET請求  
        HttpGet httpGet = new HttpGet(url);  
        httpGet.setConfig(this.requestConfig);  
  
        CloseableHttpResponse response = null;  
        try {  
            // 執行請求  
            response = httpClient.execute(httpGet);  
            // 判斷返回狀態是否為200  
            if (response.getStatusLine().getStatusCode() == 200) {  
                return EntityUtils.toString(response.getEntity(), "UTF-8");  
            }  
        } finally {  
            if (response != null) {  
                response.close();  
            }  
        }  
        return null;  
    }  
  
    /** 
     * 帶有引數的GET請求 
     *  
     * @param url 
     * @param params 
     * @return 
     * @throws URISyntaxException 
     * @throws IOException 
     * @throws ClientProtocolException 
     */  
    public String doGet(String url, Map<String, String> params)  
            throws ClientProtocolException, IOException, URISyntaxException {  
        URIBuilder uriBuilder = new URIBuilder(url);  
        for (String key : params.keySet()) {  
            uriBuilder.addParameter(key, params.get(key));  
        }  
        return this.doGet(uriBuilder.build().toString());  
    }  
  
    /** 
     * 執行POST請求 
     *  
     * @param url 
     * @param params 
     * @return 
     * @throws IOException 
     */  
    public HttpResult doPost(String url, Map<String, String> params) throws IOException {  
        // 建立http POST請求  
        HttpPost httpPost = new HttpPost(url);  
        httpPost.setConfig(this.requestConfig);  
        if (params != null) {  
            // 設定2個post引數,一個是scope、一個是q  
            List<NameValuePair> parameters = new ArrayList<NameValuePair>();  
            for (String key : params.keySet()) {  
                parameters.add(new BasicNameValuePair(key, params.get(key)));  
            }  
            // 構造一個form表單式的實體  
            UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(parameters, "UTF-8");  
            // 將請求實體設定到httpPost物件中  
            httpPost.setEntity(formEntity);  
        }  
  
        CloseableHttpResponse response = null;  
        try {  
            // 執行請求  
            response = httpClient.execute(httpPost);  
            return new HttpResult(response.getStatusLine().getStatusCode(),  
                    EntityUtils.toString(response.getEntity(), "UTF-8"));  
        } finally {  
            if (response != null) {  
                response.close();  
            }  
        }  
    }  
  
    /** 
     * 執行POST請求 
     *  
     * @param url 
     * @return 
     * @throws IOException 
     */  
    public HttpResult doPost(String url) throws IOException {  
        return this.doPost(url, null);  
    }  
  
    /** 
     * 提交json資料 
     *  
     * @param url 
     * @param json 
     * @return 
     * @throws ClientProtocolException 
     * @throws IOException 
     */  
    public HttpResult doPostJson(String url, String json) throws ClientProtocolException, IOException {  
        // 建立http POST請求  
        HttpPost httpPost = new HttpPost(url);  
        httpPost.setConfig(this.requestConfig);  
  
        if (json != null) {  
            // 構造一個form表單式的實體  
            StringEntity stringEntity = new StringEntity(json, ContentType.APPLICATION_JSON);  
            // 將請求實體設定到httpPost物件中  
            httpPost.setEntity(stringEntity);  
        }  
  
        CloseableHttpResponse response = null;  
        try {  
            // 執行請求  
            response = this.httpClient.execute(httpPost);  
            return new HttpResult(response.getStatusLine().getStatusCode(),  
                    EntityUtils.toString(response.getEntity(), "UTF-8"));  
        } finally {  
            if (response != null) {  
                response.close();  
            }  
        }  
    }  
  
}  

8.8 SgmTestServiceImpl

package com.mgkj.tool.service.impl;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

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

import com.mgkj.tool.dao.SgmTestMapper;
import com.mgkj.tool.model.SgmTest;
import com.mgkj.tool.service.SgmTestService;
import com.mgkj.tool.service.util.MyResult;

/** 
 * @author	sunguimin 
 * @version 建立時間:2018-08-10 16:21:37 
 * 類說明:	
 */
@Service
public class SgmTestServiceImpl implements SgmTestService {

	@Autowired
	SgmTestMapper sgmTestDao;

	@Override
	public MyResult<Object> showList(HttpServletRequest request, HttpServletResponse response) {
		try {
			List<SgmTest> list = sgmTestDao.findByRecord();
			return MyResult.ok(list);
		} catch (Exception e) {
			e.printStackTrace();
			return MyResult.error("查詢失敗");	
		}
	}
}

8.9 HttpResult

package com.mgkj.tool.service.util;
/** 
 * @author	Min 
 * @version 建立時間:2017年6月20日 下午2:40:54 
 * 類說明:	
 */
public class HttpResult {  
    
    /** 
     * 狀態碼 
     */  
    private Integer status;  
    /** 
     * 返回資料 
     */  
    private String data;  
  
    public HttpResult() {  
    }  
  
    public HttpResult(Integer status, String data) {  
        this.status = status;  
        this.data = data;  
    }  
  
    public Integer getStatus() {  
        return status;  
    }  
  
    public void setStatus(Integer status) {  
        this.status = status;  
    }  
  
    public String getData() {  
        return data;  
    }  
  
    public void setData(String data) {  
        this.data = data;  
    }  
  
}  

8.10 MyResult

package com.mgkj.tool.service.util;

import java.io.Serializable;
/**
 * 資料返回返回結果
 * @author Min
 *
 * @param <T>
 */
public class MyResult<T> implements Serializable {

	private static final long serialVersionUID = 1L;
	private int status;
	private String msg;
	private T data;
	private int count;

	//不帶引數
	public static MyResult<Object> ok(){
		MyResult<Object> result = new MyResult<Object>();
		result.setStatus(0);
		result.setMsg("success");
		result.setData(null);
		return result;
	}
	//帶 返回值
	public static MyResult<Object> ok(Object object){
		MyResult<Object> result = new MyResult<Object>();
		result.setStatus(0);
		result.setMsg("success");
		result.setData(object);
		return result;
	}
	//帶 總記錄數 和 返回值
	public static MyResult<Object> ok(int count, Object object){
		MyResult<Object> result = new MyResult<Object>();
		result.setStatus(0);
		result.setMsg("success");
		result.setData(object);
		result.setCount(count);
		return result;
	}
	//不帶引數
	public static MyResult<Object> error(){
		MyResult<Object> result = new MyResult<Object>();
		result.setStatus(1);
		result.setMsg("fail");
		result.setData(null);
		return result;
	}
	//帶引數
	public static MyResult<Object> error(Object object){
		MyResult<Object> result = new MyResult<Object>();
		result.setStatus(1);
		result.setMsg("fail");
		result.setData(object);
		return result;
	}

	public int getStatus() {
		return status;
	}
	public void setStatus(int status) {
		this.status = status;
	}
	public String getMsg() {
		return msg;
	}
	public void setMsg(String msg) {
		this.msg = msg;
	}
	public T getData() {
		return data;
	}
	public void setData(T data) {
		this.data = data;
	}
	public int getCount() {
		return count;
	}
	public void setCount(int count) {
		this.count = count;
	}

	@Override
	public String toString() {
		return "MyResult [status=" + status + ", msg=" + msg + ", data=" + data + ", count=" + count + "]";
	}

}

8.11 SgmTestService

package com.mgkj.tool.service;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.mgkj.tool.service.util.MyResult;

/** 
 * @author	sunguimin 	
 * @version 建立時間:2018-08-10 16:21:37  
 */
public interface SgmTestService{
	
	MyResult<Object> showList(HttpServletRequest request, HttpServletResponse response);
	
}

以上程式碼是全部檔案,如複製程式碼,請對應更改專案名稱,實體名稱,包名,類名。。。。

9.啟動專案:

啟動專案, 專案啟動成功。

10.測試介面

資料成功返回。

Spring+SpringMVC+Mybatis 專案搭建成功。