SpringBoot快速搭建web項(xiàng)目詳細(xì)步驟總結(jié)
最近在學(xué)習(xí)Spring Boot 相關(guān)的技術(shù),剛接觸就有種相見恨晚的感覺,因?yàn)橛胹pring boot進(jìn)行項(xiàng)目的搭建是在太方便了,我們往往只需要很簡單的幾步,便可完成一個spring MVC項(xiàng)目的搭建,感覺就是下圖:
好,下面就本人搭建項(xiàng)目的過程簡單說說如何快速搭建一個spring MVC項(xiàng)目,相信我,spring-boot這趟車,你上了根本就停不下來了!
下面是這篇博客的主要內(nèi)容:
- spring boot 介紹
- spring boot 項(xiàng)目快速搭建
- spring-boot中單元測試
- spring boot 與mybatis 的集成
一、初識spring boot
1、web項(xiàng)目傳統(tǒng)的搭建方式
導(dǎo)入jar包,配置tomcat 的context.xml 、web.xml,配置class path ,啟動。我靠,怎么一堆報(bào)錯?classNotFoundException?尼瑪哥不是導(dǎo)入了jar包嗎,哦版本不對,那我使用maven管理jar包咯,千辛萬苦終于配置好maven 并學(xué)會了如何使用,啟動也沒報(bào)錯了,但是尼瑪已經(jīng)過去打半天了我都還沒有開始正式代碼的書寫,趕緊開始寫業(yè)務(wù)代碼吧,又發(fā)現(xiàn)spring 中配置老是尼瑪?shù)膱?bào)錯,而我他媽只是想要搞個簡單的發(fā)郵件功能啊。
所以說,自己搭建web項(xiàng)目,很多步驟都是重復(fù)性的,有沒有什么工具可以一步達(dá)成???我只想快點(diǎn)投入到實(shí)際業(yè)務(wù)開發(fā)中去,我再也不想折騰jar包版本問題,再也不想折騰那繁瑣的配置過程(雖然這是一個很好的學(xué)習(xí)過程),那么,spring boot 估計(jì)是老鐵你不二的選擇!
2、spring boot 是什么?
什么是spring boot?直接copy官網(wǎng)的介紹:
原諒我并不咋地的英文,官網(wǎng)說,spring boot 可以讓你以一種非常簡單的方式構(gòu)建一個機(jī)遇Application 的spring 項(xiàng)目,而你索要做的僅僅是run 這個項(xiàng)目,spring boot 集成了主流的框架,我們構(gòu)建項(xiàng)目大概只需要兩三分鐘,spring boot 項(xiàng)目,只需要很少的配置即可。
用了spring boot 后,你會發(fā)現(xiàn),什么配置問題,什么jar包問題統(tǒng)統(tǒng)沒有了,你的生產(chǎn)效力會提高很多,因?yàn)椋瑂pring boot 已經(jīng)幫你弄好了一個項(xiàng)目原型,你只需要在這個原型上添加自己的業(yè)務(wù)代碼,自己的service 和dao就萬事大吉了!
spring boot 真的有那么厲害?好,下面就開始進(jìn)入正題,說說怎么搭建利用spring boot搭建項(xiàng)目。
二、spring boot 項(xiàng)目快速搭建
1、快速搭建一個spring MVC項(xiàng)目
來開頭來個Hello World先吧,下面緊跟我的步伐,利用spring boot 快速搭建一個MVC項(xiàng)目
第一步,上官網(wǎng),進(jìn)行項(xiàng)目原始jar 包的選取,官網(wǎng)在線搭建地址如下:https://start.spring.io/,看圖:
特別說明下:在選擇你要的jar 包中,一般包括三部分:web部分--包含 了spring、springboot 等常用的web開發(fā)必須jar包;spring提供的工具類部分(devTool),這個用于熱部署效果;數(shù)據(jù)庫部分,spring boot自動可以幫你繼承各種數(shù)據(jù)庫框架,我這里以mybatis 為演示例子,最后選完jar包的效果如下:
第二步、下載項(xiàng)目并導(dǎo)入IDE,當(dāng)然,需要版本管理工具的支持,這里推薦IntelliJ IDEA 開發(fā)工具(它簡直就是web開發(fā)的標(biāo)配?。?,具體看下面截圖:
解壓后得到項(xiàng)目文件,然后,就可以打開我們的IDE,這里已我最愛的IntelliJ idea為例子
打開idea,找到file-->open-->選擇項(xiàng)目的路徑,找打pom文件-->以project 形式打開
第三步、hello spring項(xiàng)目 大概長什么樣子?打開項(xiàng)目之后,maven 會加載必須的jar包,這段時(shí)間,你可以去喝杯香醇的龍井茶或者咖啡,當(dāng)項(xiàng)目構(gòu)建完成之后,你會看到下面這樣的典型maven目錄結(jié)構(gòu):
具體各個目錄放什么,請參考截圖,這里補(bǔ)充說明的是,HelloSpringbootApplication是整個項(xiàng)目的入口,我們啟動項(xiàng)目不再是啟動tomcat,而是運(yùn)行這個類,這個類的main方法就是整個項(xiàng)目的main方法即執(zhí)行入口,
第四步,寫hello demo了。新建一個package demo,然后新建一個類HelloSpringBoot,寫入以下代碼
@RestController public class HelloSpringBoot { @RequestMapping(path = {"/helloSpringBoot"}) public String HelloSpring (){ System.out.println("hello spring boot"); return "hello spring boot"; } }
我們先不解釋這個類里面的東西,先配置并啟動網(wǎng)站,初步感受下spring boot的魔力:
在啟動網(wǎng)站前,由于spring boot 是默認(rèn)自動注冊加載數(shù)據(jù)庫相關(guān)的類文件的,所以為了不報(bào)錯,我們需要打開數(shù)據(jù)庫并在resource目錄下的application.property中加入數(shù)據(jù)庫配置相關(guān)文件,這里以mysql為例子,配置文件如下:
spring.datasource.url=jdbc:mysql://localhost:3306/wenda?useUnicode=true&characterEncoding=utf8&useSSL=false spring.datasource.username=root spring.datasource.password=root
配置文件中各個字段含義估計(jì)讀者也能看懂,后面會再具體說明。
當(dāng)然,如果沒有安裝數(shù)據(jù)庫,讀者也可以在HelloSpringbootApplication 類中利用exclude屬性聲明不自動注冊加載數(shù)據(jù)庫相關(guān)文件,具體參考下面的代碼:
@SpringBootApplication(exclude={DataSourceAutoConfiguration.class,MybatisAutoConfiguration.class})//這里的MybatisAutoConfiguration.class對應(yīng)你的數(shù)據(jù)庫框架 public class HelloSpringbootApplication { public static void main(String[] args) { SpringApplication.run(HelloSpringbootApplication.class, args); } }
然后,我們所有的工作就完成了,可以啟動網(wǎng)站了,見證奇跡的時(shí)候到了。
找到HelloSpringbootApplication類,雙擊打卡,右擊鼠標(biāo),run,然后項(xiàng)目就啟動了。
啟動網(wǎng)站之后,輸入http://localhost:8080/helloSpringBoot即可訪問對應(yīng)的方法。瀏覽器以及idea后臺效果如圖
這里簡單解釋下這個類里面的東西的含義:
首先是@RestController這個注解:用過spring的大佬估計(jì)知道是什么東西,當(dāng)我們其他類要通過spring引用該類時(shí),第一步就是要將該類注冊到spring中,@RestController就是相當(dāng)于將這個類注冊到spring容器的意思當(dāng)然,還有一種比較常用的就是@Controller,具體他們兩區(qū)別后面再討論吧。
然后就是@RequestMapping,通過設(shè)置這個注解里面面的path屬性,就可以聲明相對于項(xiàng)目根路徑(localhost:8080)的訪問路徑。
2、spring boot 項(xiàng)目中利用springMVC實(shí)現(xiàn)傳參
上面的demo中的方法只是一個非常簡單的實(shí)例,在實(shí)際生產(chǎn)中, 我們的應(yīng)用不可能這么簡單的,前端還需要傳輸參數(shù)到后臺,所以,用spring boot 構(gòu)造的項(xiàng)目中,又如何實(shí)現(xiàn)傳參呢?(感覺下面的都是在總結(jié)sprign MVC相關(guān)的內(nèi)內(nèi)容了,所以大神勿噴我脫離主題,因?yàn)楦杏Xspring boot 如果單獨(dú)總結(jié)的話,貌似的確沒什么好總結(jié)的,而且spring boot 天生就不可能和其他spring 組件分割)具體請參開下面代碼例子:
@RestController public class HelloSpringBoot {/** * url傳參,訪問的路徑類似這樣:localhost:8080/getParamDemo1/1 * 方法體中的參數(shù)要在前面加注釋,@PathVariable,代表url中的參數(shù) */ @RequestMapping(path = {"/getParamDemo1/{id}"}) public String getParamDemo1 (@PathVariable("id") int userId){ System.out.println("get param " + userId); return "success get param"; } /** * 當(dāng)然,你也可以通過這種傳參方式:localhost:8080/getParamDemo?param1=1或者直接表單提交參數(shù) * 當(dāng)然,同時(shí)方法中參數(shù)聲明的注釋也要變成@RequestParam,代表請求參數(shù),required屬性說明了參數(shù)是否是必須的 */ @RequestMapping(path = {"/getParamDemo2"}) public String getParamDemo2 (@RequestParam(value="param1",required = false) int param){ System.out.println("get param " + param); return "success get param"; } }
3、構(gòu)建restful編程風(fēng)格
最近,resultful風(fēng)格編程挺火的(雖然個人覺得不可盲目跟風(fēng)),而spring boot中利用其內(nèi)置的spring MVC等框架,可以非常簡單地實(shí)現(xiàn)這種編程風(fēng)格。
例如說,我要請求查詢一個數(shù)據(jù),在resultful類的編程風(fēng)格中,查詢對應(yīng)的是get請求,那么,spring boot(準(zhǔn)確說是spring MVC) 可以針對不同的請求進(jìn)行處理,請看下面代碼:
@RestController public class HelloSpringBoot { /** * 通過設(shè)置RequestMapping的method屬性便可以設(shè)置該方法可處理的對應(yīng)請求了,例如下面的getRequestDemo方法只會處理get請求 */ @RequestMapping(path = {"/getRequestDemo"},method = RequestMethod.GET) public String getRequestDemo (@RequestParam(value="param1",required = false) int param){ System.out.println("get request test ,get param " + param); return "success get param"; } /** * 下面的deleteRequestDemo方法只會處理delete請求 */ @RequestMapping(path = {"/deleteRequestDemo"},method = RequestMethod.DELETE) public String deleteRequestDemo (@RequestParam(value="param1",required = false) int param){ System.out.println("delete request test ,get param " + param); return "success get param"; } }
另外,利用上面說的url中的值(類似這個:path="/member/{userid}")進(jìn)行資源定位,也非常符合resultful的風(fēng)格要求,例如這path="/getParamDemo1/{userid}"的配置就是對應(yīng)的就是對會員級別的某個用戶(由userid定位)進(jìn)行某些操作,如果要刪除該用戶,則對應(yīng)http請求的delete請求即可。
通過上面的那些步驟,估計(jì)讀者對于如何用spring boot 進(jìn)行一個簡單的web項(xiàng)目快速搭建已經(jīng)清楚了,下面在spring boot搭建的項(xiàng)目中如何進(jìn)行單元測試。
三、spring boot 項(xiàng)目中的單元測試問題
spring boot 中集成了junite框架,對于單元測試,也不用寫各種繁瑣的類了,只需要對測試類進(jìn)行一定的注釋,spring boot 便會幫你做好一切,就算是數(shù)據(jù)庫相關(guān)的操作,spring boot 也能很好地進(jìn)行測試,具體還是看代碼例子,下面是一個簡單的測試業(yè)務(wù)類方法的例子:
首先,我們新建一個service 層,新增一個demo類,最后的demo代碼如下:
@Component public class ServiceDemo { public String testDemo(){ String rtnAfterDosomething = "我是返回結(jié)果"; //這里是業(yè)務(wù)代碼 return rtnAfterDosomething; } }
下面的代碼是測試類
@RunWith(SpringRunner.class) @SpringBootTest public class ServiceDemoTest { @Autowired ServiceDemo serviceDemo; @Test public void testDemo() { String rtn = serviceDemo.testDemo(); Assert.assertEquals(rtn, "我是返回結(jié)果"); } }
如果要測試數(shù)據(jù)庫dao,也是類似的,但是特別注意的是,測試之前必須啟動項(xiàng)目(即HelloSpringbootApplication的run方法必須運(yùn)行起來),否則將會包c(diǎn)an not find ApplicationContext的錯誤。
四、spring boot中配置數(shù)據(jù)庫框架(以mybatis為例子)
在spring boot中集成數(shù)據(jù)庫相關(guān)的開源框架也是很方便的(當(dāng)然,記得在一開始新建項(xiàng)目的時(shí)候引用相關(guān)的jar包),當(dāng)你上面的步驟都沒什么錯誤的時(shí)候,你只需要簡單地配置下applocation.properties文件即可
spring.datasource.url=jdbc:mysql://localhost:3306/springboot?useUnicode=true&characterEncoding=utf8&useSSL=false spring.datasource.username=root spring.datasource.password=root #下面這條配置聲明了mybatis的配置文件路徑,classpath對應(yīng)的是和這個文件統(tǒng)計(jì)的resources mybatis.config-location=classpath:mybatis-config.xml
目錄的文件結(jié)構(gòu)參考下面截圖:
ok,mybatis 的引用配置便弄好了,下面我們嘗試?yán)胢ybatis 這個數(shù)據(jù)庫框架,進(jìn)行一個數(shù)據(jù)庫的簡單查詢操作,首先,看下面的mybatis-config.xml的配置內(nèi)容,讀者可以以這個為模板進(jìn)行配置,當(dāng)然,想了解更具體的mybatis配置說明,建議去官網(wǎng)看看,這里不展開了:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <settings> <!-- Globally enables or disables any caches configured in any mapper under this configuration --> <setting name="cacheEnabled" value="true"/> <!-- Sets the number of seconds the driver will wait for a response from the database --> <setting name="defaultStatementTimeout" value="3000"/> <!-- Enables automatic mapping from classic database column names A_COLUMN to camel case classic Java property names aColumn --> <setting name="mapUnderscoreToCamelCase" value="true"/> <!-- Allows JDBC support for generated keys. A compatible driver is required. This setting forces generated keys to be used if set to true, as some drivers deny compatibility but still work --> <setting name="useGeneratedKeys" value="true"/> </settings> <!-- Continue going here --> </configuration>
恩,然后,就可以進(jìn)行數(shù)據(jù)庫的操作了,我簡單用mysql建了個名字為springboot的數(shù)據(jù)庫,在庫里面建了一個簡單的demo表(具體怎么建表那些不用我說了吧?實(shí)在沒有接觸過數(shù)據(jù)庫的同學(xué),可以自行百度或者谷歌去咯),然后,dao代碼如下:
@Mapper public interface DemoDao { @Select({"select demo_param from demo "}) String queryDemo(); }
注意,mybatis 的dao是一個接口,關(guān)于mybatis更多的內(nèi)容,請讀者參開官方文檔,這里不展開了。
然后,就在原來的ServiceDemo類中調(diào)用一下吧,代碼看下圖吧:
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.stereotype.Controller; import springboot.hello.helloSpringboot.dao.DemoDao; @Component public class ServiceDemo { @Autowired DemoDao demoDao; public String testDemo(){ String rtnAfterDosomething = "我是返回結(jié)果"; //這里是業(yè)務(wù)代碼 return rtnAfterDosomething; } public String queryDemo(){ return demoDao.queryDemo(); } }
ok,簡單寫個測試類,出現(xiàn)小綠條,測試成功。
然后,所有項(xiàng)目原型的工作完成了,然后,我們就可以進(jìn)行我們核心業(yè)務(wù)開發(fā)了,很快有沒有?很爽有木有?所以說,spring boot 搭建項(xiàng)目的確飛快,可以讓我們省去很多機(jī)械的前期操作,讀者們趕緊去探索下吧,spring boot ,你值得捅有!
OK,今天總結(jié)到這里,這個項(xiàng)目的代碼在gitHub上這個地址,需要的人自?。?a target="_blank" rel="external nofollow" >https://github.com/lcpandcode/helloSpringboot.git
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- 運(yùn)用springboot搭建并部署web項(xiàng)目的示例
- IDEA上面搭建一個SpringBoot的web-mvc項(xiàng)目遇到的問題
- 使用IDEA搭建一個簡單的SpringBoot項(xiàng)目超詳細(xì)過程
- 從零開始搭建springboot+springcloud+mybatis本地項(xiàng)目全過程(圖解)
- springboot+idea+maven 多模塊項(xiàng)目搭建的詳細(xì)過程(連接數(shù)據(jù)庫進(jìn)行測試)
- Idea使用插件實(shí)現(xiàn)逆向工程搭建SpringBoot項(xiàng)目的圖文教程
- springboot學(xué)習(xí)之構(gòu)建簡單項(xiàng)目搭建步驟詳解
- 快速搭建一個SpringBoot項(xiàng)目(純小白搭建教程)
相關(guān)文章
idea中斷點(diǎn)類型之All和Thread的區(qū)別介紹
使用all模式對于程序中含有多個線程來說,會將多個線程都阻塞在斷點(diǎn),此時(shí)所有的線程都執(zhí)行到此處,在最后一個線程執(zhí)行到此處是會發(fā)生暫停,在這之前的線程會繼續(xù)執(zhí)行到任意位置,本文給大家詳細(xì)介紹下idea中斷點(diǎn)類型之All和Thread的區(qū)別,感興趣的朋友一起看看吧2022-03-03基于springboot設(shè)置Https請求過程解析
這篇文章主要介紹了基于springboot設(shè)置Https請求過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08解決kafka:org.apache.kafka.common.errors.TimeoutException問題
這篇文章主要介紹了解決kafka:org.apache.kafka.common.errors.TimeoutException問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-01-01IDEA JavaWeb項(xiàng)目啟動運(yùn)行后出現(xiàn)404錯誤的解決方法
這篇文章主要介紹了IDEA JavaWeb項(xiàng)目啟動運(yùn)行后出現(xiàn)404錯誤的解決方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12使用Java將字符串在ISO-8859-1和UTF-8之間相互轉(zhuǎn)換
大家都知道在一些情況下,我們需要特殊的編碼格式,如:UTF-8,但是系統(tǒng)默認(rèn)的編碼為ISO-8859-1,遇到這個問題,該如何對字符串進(jìn)行兩個編碼的轉(zhuǎn)換呢,下面小編給大家分享下java中如何在ISO-8859-1和UTF-8之間相互轉(zhuǎn)換,感興趣的朋友一起看看吧2021-12-12以Json形式的數(shù)據(jù)格式實(shí)現(xiàn)JMeter參數(shù)化
本文以小項(xiàng)目學(xué)院管理系統(tǒng)為例,給大家分享以Json形式的數(shù)據(jù)格式實(shí)現(xiàn)JMeter參數(shù)化的相關(guān)知識,包括添加元件操作步驟及使用用戶參數(shù)組件實(shí)現(xiàn)參數(shù)化的方法,感興趣的朋友跟隨小編一起看看吧2021-05-05用SpringMVC編寫一個HelloWorld的詳細(xì)過程
SpringMVC是Spring的一個后續(xù)產(chǎn)品,是Spring的一個子項(xiàng)目<BR>SpringMVC?是?Spring?為表述層開發(fā)提供的一整套完備的解決方案,本文我們將用SpringMVC編寫一個HelloWorld,文中有詳細(xì)的編寫過程,需要的朋友可以參考下2023-08-08Java 動態(tài)模擬操作系統(tǒng)進(jìn)程調(diào)度算法
這篇文章主要介紹了采用java語言編程模擬N個進(jìn)程采用動態(tài)高優(yōu)先權(quán)優(yōu)先進(jìn)程調(diào)度算法。文中代碼具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以了解一下2021-12-12Java中的靜態(tài)綁定和動態(tài)綁定詳細(xì)介紹
這篇文章主要介紹了Java中的靜態(tài)綁定和動態(tài)綁定詳細(xì)介紹,在Java中存在兩種綁定方式,一種為靜態(tài)綁定,又稱作早期綁定,另一種就是動態(tài)綁定,亦稱為后期綁定,需要的朋友可以參考下2015-01-01