SpringMvc+MyBatis+MySQL+Maven+Redis搭建一個基礎的web專案
前言
近來由於公司專案的需要,暫時放下了前端android的開發,慢慢投入到後臺介面系統搭建,在經過與眾兄弟的討論下,決定就使用最常規的框架去搭建一個後臺介面系統,這樣一方面大家都比較的熟悉,另一方面對於新人和後期的維護都會相對比較容易一些,因此,針對這一系列框架最基礎的搭建,在此做一個簡單的總結,希望能對這一塊兒還相對陌生的猿猿能有所幫助
先上原始碼,點選下載
閱讀請參考部落格:SpringMvc+MyBatis+MySQL+Maven+Redis搭建一個基礎的web專案
軟體安裝及資源配置
JDK安裝
- jdk下載
jdk1.8下載之後,安裝; - 環境變數配置
- “我的電腦”–>右鍵–>屬性–>高階系統設定–>環境變數–>系統變數–>新建–>新增一項“JAVA_HOME”路徑為jdk的安裝路徑,如下圖:
- 然後path中新增 %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;,如下圖:
- 測試
cmd下輸入:java -version 如下圖效果說明安裝成功
- “我的電腦”–>右鍵–>屬性–>高階系統設定–>環境變數–>系統變數–>新建–>新增一項“JAVA_HOME”路徑為jdk的安裝路徑,如下圖:
MyEclipse10安裝及破解
- 資源下載
MyEclipse10及破解工具下載入口 - 安裝及破解
MyEclipse的安裝就是next next…finish即可;其中破解工具開啟軟體日誌欄中寫有相應的教程,請參考教程步驟;一步步破解,這是我目前發現最好用的一個破解工具。
Maven安裝及配置
(根據個人需要;可用可不用)
- 資源下載
maven-3.2.1版本下載
- 解壓壓縮包
如下圖:
- 配置環境變數
- 如第一步中配置jdk一樣,進入到環境變數配置頁面
- 新增“MAVEN_HOME”配置解壓後maven的路徑
如下圖:
- 將maven路徑指定到path下
如下圖:
- 測試
開啟cmd (如果還是之前測試jdk的cmd視窗,請關閉了重新開啟)輸入:mvn -v 如果出現以下效果,說明已經安裝成功:
- 調整maven的配置檔案
- 找到解壓路徑下的conf檔案,進去找到setting.xml配置檔案
- 將該配置檔案拷貝至“C:\Users\Administrator.m2”路徑下
配置到這裡的目的是為了以後我們更新了maven的版本之後,不需要出現配置setting檔案,至需要更換一下環境變數即可,如下圖:
- 開啟setting檔案,找到“localRepository”配置自己本機maven倉庫的路徑(根據個人習慣配置),如果不配置這個路徑,預設會在將以下路徑“C:\Users\Administrator.m2\repository“作為Maven倉庫
- Myeclipse配置Maven
開啟MyEclipse,選擇Window–>Preferences–>Maven4MyEclipse–>User Settings,配置上一步中修改的settings.xml檔案,如下圖:
MySQL下載及安裝
- 資源下載
MySQL安裝版、免安裝版及Navicat破解版下載 - 安裝
- MySQL安裝版安裝
以上鍊接中下載MySQL安裝版,解壓,安裝,然後next next …finish即可 - 免安裝版安裝
請參考之前的部落格MySQL安裝及視覺化工具使用 - Navicat(MySQL)視覺化工具安裝及破解
下載以上鍊接中Navicat工具,根據個人電腦的情況選擇32位或者64位的安裝;安裝完之後執行”patchNavicat.exe”即可完成工具破解
- MySQL安裝版安裝
Tomcat下載及安裝
- 資源下載
Tomcat 7.0資源下載;rar和exe檔案為安裝版tomcat,zip包為免安裝版tomcat;根據需要下載相應的檔案;演示選擇的exe安裝版。 - Tomcat安裝
老規矩,next next.. finish即可;安裝路徑最好不要出現空格在裡面;隱隱約約記得好像Tomcat的全路徑中有空格在什麼地方是會有問題;具體什麼問題也記不清了;也可能是我記錯了;嘮叨一句,選擇一個不含空格的路徑安裝;以防萬一。 - MyEclipse配置Tomcat
開啟MyEclipse,選擇Window–>Preferences–>MyEclipse–>service–>Tomcat 7.x;按如下圖配置上面步驟中安裝的路徑;
注:記得要勾選上“Enable”選項,否則這個配置將不會生效; - 測試Tomcat
- 啟動服務
按下圖步驟啟動服務,見日誌欄中出現下圖中的日誌,說明服務啟動成功;
- 瀏覽器測試
瀏覽器中輸入:localhost:8080;如出現如下效果,說明tomcat配置成功;
- 啟動服務
Redis下載及安裝
(根據個人需要,redis可用可不用)
可參考資料Redis安裝
- 資源下載
Redis-x64-3.2.100下載,並解壓安裝包 - 啟動服務
cmd下進入解壓目錄,輸入:redis-server.exe redis.windows.conf;見到如下圖效果,說明服務已經啟動成功了。
- redis客戶端測試
新起一個cmd視窗(注意上面的服務cmd視窗不要關閉了);輸入:redis-cli.exe -h 127.0.0.1 -p 6379 連結到本地redis的服務;通過set、get指令測試存取值正常;如下圖:
專案搭建
專案建立
建立maven專案
專案搭建
右鍵–>New–>Web Project;輸入專案名,選擇j2ee 6.0,勾選上Add Maven support,點選finish,如下圖
建立成功之後為如下結構:
專案結構調整
- 建立基礎的資源配置、測試程式碼、測試資源配置資料夾
右鍵–>build Path–>New Source Folder
或者右鍵–>New–>Source Folder
然後分別建立“src/main/resources”、”src/test/java”、”src/test/resources” 如下圖:
- 建立基礎的資源配置、測試程式碼、測試資源配置資料夾
整理程式碼及資源配置檔案結構
按以上結構分別建立資料夾即可
資料庫基礎資料準備
建立一個簡單的使用者表,使用者測試即可,如下圖:
建立指令碼如下Date: 2017-07-02 19:20:45 */ SET FOREIGN_KEY_CHECKS=0; -- ---------------------------- -- Table structure for userinfo -- ---------------------------- DROP TABLE IF EXISTS `userinfo`; CREATE TABLE `userinfo` ( `ID` int(11) NOT NULL AUTO_INCREMENT, `NAME` varchar(20) NOT NULL, `AGE` int(5) DEFAULT NULL, `SEX` int(1) DEFAULT NULL, `ADD` varchar(255) DEFAULT NULL, PRIMARY KEY (`ID`) ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8; -- ---------------------------- -- Records of userinfo -- ---------------------------- INSERT INTO `userinfo` VALUES ('1', '張三', '10', '0', '北京'); INSERT INTO `userinfo` VALUES ('2', '李四', '20', '1', '上海'); INSERT INTO `userinfo` VALUES ('3', '趙五', '23', '1', '廣州'); INSERT INTO `userinfo` VALUES ('4', '錢六', '50', '0', '臺灣');
外掛配置
Maven的pom.xml配置
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <!-- spring版本號 --> <spring.version>3.2.8.RELEASE</spring.version> <!-- log4j日誌檔案管理包版本 --> <slf4j.version>1.6.6</slf4j.version> <log4j.version>1.2.12</log4j.version> <!-- junit版本號 --> <junit.version>4.10</junit.version> <!-- mybatis版本號 --> <mybatis.version>3.2.1</mybatis.version> </properties> <dependencies> <!-- 新增Spring依賴 --> <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-context</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-aop</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aspects</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-web</artifactId> <version>${spring.version}</version> </dependency> <!--單元測試依賴 --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>${junit.version}</version> <scope>test</scope> </dependency> <!-- 日誌檔案管理包 --> <!-- log start --> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>${log4j.version}</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 --> <!--spring單元測試依賴 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>${spring.version}</version> <scope>test</scope> </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.2.0</version> </dependency> <!-- mysql驅動包 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.29</version> </dependency> <!-- javaee-api包 注意和專案使用的JDK版本對應 --> <dependency> <groupId>javax</groupId> <artifactId>javaee-api</artifactId> <version>6.0</version> <scope>provided</scope> </dependency> <!-- javaee-web-api包 注意和專案使用的JDK版本對應 --> <dependency> <groupId>javax</groupId> <artifactId>javaee-web-api</artifactId> <version>6.0</version> <scope>provided</scope> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.7.4</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.7.4</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>2.7.4</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.32</version> </dependency> <!-- redis --> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-redis</artifactId> <version>1.3.0.RELEASE</version> </dependency> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.6.2</version> </dependency> </dependencies>
新增成功儲存,Maven會自動下載相應的對應版本的包到本地倉庫;由於部分資源包在不同的網路環境下下載會比較慢,如果Maven下載不下來,我在百度雲盤共享了一份上面各個版本對應的包,可以下載下來解壓到本地的倉庫即可使用;點選下載
MyBatis配置
jdbc屬性配置檔案
在properties資料夾下建立jdbc.properties,並配置以下引數:jdbc_driverClassName=com.mysql.jdbc.Driver jdbc_url=jdbc:mysql://127.0.0.1:3306/springmvcdb jdbc_username=lpf jdbc_password=123456
mybatis配置
這裡直接配置在application.xml;請參考後續的applocation配置
redis配置
redis引數配置檔案
在redis資料夾下建立redis.properties,新增如下引數:redis.pool.maxTotal=105 redis.pool.maxIdle=10 redis.pool.maxWaitMillis=5000 redis.pool.testOnBorrow=true redis.host=127.0.0.1 redis.port=6379 redis.password= redis.db.index=0
redis基礎配置
在redis下建立redis-config.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" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!-- 快取的層級 --> <context:component-scan base-package="com.lpf.springmvc" /> <!-- 引入redis配置 --> <!-- <context:property-placeholder location="redis.properties" ignore-unresolvable="true" /> --> <!-- Redis 配置 --> <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig"> <property name="maxTotal" value="${redis.pool.maxTotal}" /> <property name="maxIdle" value="${redis.pool.maxIdle}" /> <property name="maxWaitMillis" value="${redis.pool.maxWaitMillis}" /> <property name="testOnBorrow" value="${redis.pool.testOnBorrow}" /> </bean> <bean id="jedisPool" class="redis.clients.jedis.JedisPool"> <constructor-arg name="poolConfig" ref="jedisPoolConfig" /> <constructor-arg name="host" value="${redis.host}" /> <constructor-arg name="port" value="${redis.port}" type="int" /> <constructor-arg name="timeout" value="${redis.pool.maxWaitMillis}" type="int" /> <constructor-arg name="password" value="#{'${redis.password}'!=''?'${redis.password}':null}" /> <constructor-arg name="database" value="${redis.db.index}" type="int" /> </bean> <!-- JedisCluster 叢集高可用配置 --> <!--<bean id="jedisCluster" class="redis.clients.jedis.JedisCluster"> <constructor-arg index="0"> <set> <bean class="redis.clients.jedis.HostAndPort"> <constructor-arg index="0" value="${redis.ip1}" /> <constructor-arg index="1" value="${redis.port1}" type="int" /> </bean> <bean class="redis.clients.jedis.HostAndPort"> <constructor-arg index="0" value="${redis.ip2}" /> <constructor-arg index="1" value="${redis.port2}" type="int" /> </bean> <bean class="redis.clients.jedis.HostAndPort"> <constructor-arg index="0" value="${redis.ip3}" /> <constructor-arg index="1" value="${redis.port3}" type="int" /> </bean> <bean class="redis.clients.jedis.HostAndPort"> <constructor-arg index="0" value="${redis.ip4}" /> <constructor-arg index="1" value="${redis.port4}" type="int" /> </bean> <bean class="redis.clients.jedis.HostAndPort"> <constructor-arg index="0" value="${redis.ip5}" /> <constructor-arg index="1" value="${redis.port5}" type="int" /> </bean> <bean class="redis.clients.jedis.HostAndPort"> <constructor-arg index="0" value="${redis.ip6}" /> <constructor-arg index="1" value="${redis.port6}" type="int" /> </bean> </set> </constructor-arg> <constructor-arg index="1" value="2000" type="int"></constructor-arg> <constructor-arg index="2" value="100" type="int"></constructor-arg> <constructor-arg index="3" ref="jedisPoolConfig"></constructor-arg> </bean> --> <!--redis Sentinel主從高可用方案配置 --> <!-- <bean id="sentinelConfiguration" class="org.springframework.data.redis.connection.RedisSentinelConfiguration"> <property name="master"> <bean class="org.springframework.data.redis.connection.RedisNode"> <property name="name" value="master-1"></property> </bean> </property> <property name="sentinels"> <set> <bean class="org.springframework.data.redis.connection.RedisNode"> <constructor-arg name="host" value="${sentinel1.ip}"></constructor-arg> <constructor-arg name="port" value="${sentinel1.port}"></constructor-arg> </bean> <bean class="org.springframework.data.redis.connection.RedisNode"> <constructor-arg name="host" value="${sentinel2.ip}"></constructor-arg> <constructor-arg name="port" value="${sentinel2.port}"></constructor-arg> </bean> <bean class="org.springframework.data.redis.connection.RedisNode"> <constructor-arg name="host" value="${sentinel3.ip}"></constructor-arg> <constructor-arg name="port" value="${sentinel3.port}"></constructor-arg> </bean> </set> </property> </bean> <bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory" p:use-pool="true"> <property name="password" value="${redis.pass}" /> <property name="poolConfig"> <ref bean="jedisPoolConfig" /> </property> <constructor-arg name="sentinelConfig" ref="sentinelConfiguration" /> </bean> --> <!-- redis單節點資料庫連線配置 --> <bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"> <property name="hostName" value="${redis.host}" /> <property name="port" value="${redis.port}" /> <property name="password" value="${redis.password}" /> <property name="poolConfig" ref="jedisPoolConfig" /> </bean> <!-- redisTemplate配置,redisTemplate是對Jedis的對redis操作的擴充套件,有更多的操作,封裝使操作更便捷 --> <bean id="redisTemplate" class="org.springframework.data.redis.core.StringRedisTemplate"> <property name="connectionFactory" ref="jedisConnectionFactory" /> </bean> </beans>
redis dao層相關配置
介面定義
在Dao檔案加下建立一個用於獲取redis下資料的介面(以獲取一個文字型的資料為例)package com.lpf.springmvc.dao; import org.springframework.stereotype.Repository; @Repository public interface RedisDao { String get(String key); }
建立Jedis幫助物件
一個公共的幫助類,程式碼太長,放到網盤了,下載下來即可:JedisUtil- 建立dao的具體實現
在dao檔案下建立RedisDaoImpl,實現RedisDao介面,程式碼如下:
package com.lpf.springmvc.dao; import javax.annotation.Resource; import com.lpf.springmvc.utils.JedisUtil; import redis.clients.jedis.JedisPool; public class RedisDaoImpl implements RedisDao { @Resource JedisPool jedisPool; public String get(String key) { // TODO Auto-generated method stub JedisUtil jedisUtil = new JedisUtil(jedisPool); JedisUtil.Strings strings = jedisUtil.new Strings(); System.out.println("cache: " + strings.get(key)); return strings.get(key); } }
配置完成之後,為如下效果:
SpringMvc相關配置
- springmvc基礎配置
在springmvc資料夾下建立spring-mvc.xml,並配置以下程式碼
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:p="http://www.springframework.org/schema/p" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-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 /> --> <!-- 設定Jackson在返回的時候過濾掉null的資料 --> <mvc:annotation-driven> <mvc:message-converters register-defaults="true"> <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> <property name="objectMapper"> <bean class="com.fasterxml.jackson.databind.ObjectMapper"> <property name="serializationInclusion"> <value type="com.fasterxml.jackson.annotation.JsonInclude.Include">NON_NULL</value> </property> </bean> </property> </bean> </mvc:message-converters> </mvc:annotation-driven> <!-- 啟動Spring MVC的註解功能,完成請求和註解POJO的對映 --> <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> <property name="messageConverters"> <list> <!--json轉換器 --> <ref bean="mappingJacksonHttpMessageConverter" /> </list> </property> </bean> <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"> <property name="messageConverters"> <list> <ref bean="mappingJacksonHttpMessageConverter" /> </list> </property> </bean> <bean id="mappingJacksonHttpMessageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> <property name="supportedMediaTypes"> <list> <bean class="org.springframework.http.M
- springmvc基礎配置