Spring-Boot快速搭建web項目詳細總結

最近在學習Spring Boot 相關的技術,剛接觸就有種相見恨晚的感受,由於用spring boot進行項目的搭建是在太方便了,咱們每每只須要很簡單的幾步,即可完成一個spring MVC項目的搭建,感受就是下圖:前端

 好,下面就本人搭建項目的過程簡單說說如何快速搭建一個spring MVC項目,相信我,spring-boot這趟車,你上了根本就停不下來了!mysql

下面是這篇博客的主要內容:git

一、spring boot 介紹github

二、spring boot 項目快速搭建web

三、spring-boot中單元測試spring

四、spring boot 與mybatis 的集成sql

 

1、初識spring boot數據庫

  一、web項目傳統的搭建方式編程

  導入jar包,配置tomcat 的context.xml 、web.xml,配置class path ,啓動。我靠,怎麼一堆報錯?classNotFoundException?尼瑪哥不是導入了jar包嗎,哦版本不對,那我使用maven管理jar包咯,千辛萬苦終於配置好maven 並學會了如何使用,啓動也沒報錯了,可是尼瑪已通過去打半天了我都尚未開始正式代碼的書寫,趕忙開始寫業務代碼吧,又發現spring 中配置總是尼瑪的報錯,而我他媽只是想要搞個簡單的發郵件功能啊。瀏覽器

  因此說,本身搭建web項目,不少步驟都是重複性的,有沒有什麼工具能夠一步達成啊?我只想快點投入到實際業務開發中去,我不再想折騰jar包版本問題,不再想折騰那繁瑣的配置過程(雖然這是一個很好的學習過程),那麼,spring boot 估計是老鐵你不二的選擇!

  二、spring boot 是什麼?

  什麼是spring boot?直接copy官網的介紹:

   原諒我並不咋地的英文,官網說,spring boot 可讓你以一種很是簡單的方式構建一個機遇Application 的spring 項目,而你索要作的僅僅是run 這個項目,spring boot  集成了主流的框架,咱們構建項目大概只須要兩三分鐘,spring boot 項目,只須要不多的配置便可。

  用了spring boot 後,你會發現,什麼配置問題,什麼jar包問題通通沒有了,你的生產效力會提升不少,由於,spring boot 已經幫你弄好了一個項目原型,你只須要在這個原型上添加本身的業務代碼,本身的service 和dao就萬事大吉了!

  spring boot 真的有那麼厲害?好,下面就開始進入正題,說說怎麼搭建利用spring boot搭建項目。

二、spring boot 項目快速搭建

  一、快速搭建一個spring MVC項目

  來開頭來個Hello World先吧,下面緊跟個人步伐,利用spring boot 快速搭建一個MVC項目

  第一步,上官網,進行項目原始jar 包的選取,官網在線搭建地址以下:https://start.spring.io/,看圖:

 

  特別說明下:在選擇你要的jar 包中,通常包括三部分:web部分--包含 了spring、springboot 等經常使用的web開發必須jar包;spring提供的工具類部分(devTool),這個用於熱部署效果;數據庫部分,spring boot自動能夠幫你繼承各類數據庫框架,我這裏以mybatis 爲演示例子,最後選完jar包的效果以下:

  第二步、下載項目並導入IDE,固然,須要版本管理工具的支持,這裏推薦IntelliJ IDEA 開發工具(它簡直就是web開發的標配!),具體看下面截圖:

  

  解壓後獲得項目文件,而後,就能夠打開咱們的IDE,這裏已我最愛的IntelliJ  idea爲例子

  打開idea,找到file-->open-->選擇項目的路徑,找打pom文件-->以project 形式打開

 

   第三步、hello spring項目 大概長什麼樣子?打開項目以後,maven 會加載必須的jar包,這段時間,你能夠去喝杯香醇的龍井茶或者咖啡,當項目構建完成以後,你會看到下面這樣的典型maven目錄結構:

  具體各個目錄放什麼,請參考截圖,這裏補充說明的是,HelloSpringbootApplication是整個項目的入口,咱們啓動項目再也不是啓動tomcat,而是運行這個類,這個類的main方法就是整個項目的main方法即執行入口,

  第四步,寫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";
    }
}

  咱們先不解釋這個類裏面的東西,先配置並啓動網站,初步感覺下spring boot的魔力:

  在啓動網站前,因爲spring boot 是默認自動註冊加載數據庫相關的類文件的,因此爲了避免報錯,咱們須要打開數據庫並在resource目錄下的application.property中加入數據庫配置相關文件,這裏以mysql爲例子,配置文件以下:

  

spring.datasource.url=jdbc:mysql://localhost:3306/wenda?useUnicode=true&characterEncoding=utf8&useSSL=false
spring.datasource.username=root
spring.datasource.password=root

  配置文件中各個字段含義估計讀者也能看懂,後面會再具體說明。

  固然,若是沒有安裝數據庫,讀者也能夠在HelloSpringbootApplication 類中利用exclude屬性聲明不自動註冊加載數據庫相關文件,具體參考下面的代碼:

@SpringBootApplication(exclude={DataSourceAutoConfiguration.class,MybatisAutoConfiguration.class})//這裏的MybatisAutoConfiguration.class對應你的數據庫框架
public class HelloSpringbootApplication {

    public static void main(String[] args) {
        SpringApplication.run(HelloSpringbootApplication.class, args);
    }
}

  而後,咱們全部的工做就完成了,能夠啓動網站了,見證奇蹟的時候到了。

  找到 HelloSpringbootApplication類,雙擊打卡,右擊鼠標,run,而後項目就啓動了。

 

  啓動網站以後,輸入http://localhost:8080/helloSpringBoot便可訪問對應的方法。瀏覽器以及idea後臺效果如圖

  

  這裏簡單解釋下這個類裏面的東西的含義:

  首先是@RestController這個註解:用過spring的大佬估計知道是什麼東西,當咱們其餘類要經過spring引用該類時,第一步就是要將該類註冊到spring中,@RestController就是至關於將這個類註冊到spring容器的意思固然,還有一種比較經常使用的就是@Controller,具體他們兩區別後面再討論吧。

  而後就是@RequestMapping,經過設置這個註解裏面面的path屬性,就能夠聲明相對於項目根路徑(localhost:8080)的訪問路徑。

  

  二、spring boot 項目中利用springMVC實現傳參

  上面的demo中的方法只是一個很是簡單的實例,在實際生產中, 咱們的應用不可能這麼簡單的,前端還須要傳輸參數到後臺,因此,用spring boot 構造的項目中,又如何實現傳參呢?(感受下面的都是在總結sprign MVC相關的內內容了,因此大神勿噴我脫離主題,由於感受spring boot 若是單獨總結的話,貌似的確沒什麼好總結的,並且spring boot 天生就不可能和其餘spring 組件分割)具體請參開下面代碼例子:

@RestController
public class HelloSpringBoot {/**
     * url傳參,訪問的路徑相似這樣:localhost:8080/getParamDemo1/1
     * 方法體中的參數要在前面加註釋,@PathVariable,表明url中的參數
     */
    @RequestMapping(path = {"/getParamDemo1/{id}"})
    public String getParamDemo1 (@PathVariable("id") int userId){
        System.out.println("get param " + userId);
        return "success get param";
    }
    /**
     * 固然,你也能夠經過這種傳參方式:localhost:8080/getParamDemo?param1=1或者直接表單提交參數
     * 固然,同時方法中參數聲明的註釋也要變成@RequestParam,表明請求參數,required屬性說明了參數是不是必須的
     */
    @RequestMapping(path = {"/getParamDemo2"})
    public String getParamDemo2 (@RequestParam(value="param1",required = false) int param){
        System.out.println("get param " + param);
        return "success get param";
    }
}

  

  三、構建restful編程風格

   最近,resultful風格編程挺火的(雖然我的以爲不可盲目跟風),而spring boot中利用其內置的spring MVC等框架,能夠很是簡單地實現這種編程風格。

  例如說,我要請求查詢一個數據,在resultful類的編程風格中,查詢對應的是get請求,那麼,spring boot(準確說是spring MVC) 能夠針對不一樣的請求進行處理,請看下面代碼:

@RestController
public class HelloSpringBoot {

    /**
     * 經過設置RequestMapping的method屬性即可以設置該方法可處理的對應請求了,例以下面的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}")進行資源定位,也很是符合resultful的風格要求,例如這path="/getParamDemo1/{userid}"的配置就是對應的就是對會員級別的某個用戶(由userid定位)進行某些操做,若是要刪除該用戶,則對應http請求的delete請求便可。

  經過上面的那些步驟,估計讀者對於如何用spring boot 進行一個簡單的web項目快速搭建已經清楚了,下面在spring boot搭建的項目中如何進行單元測試。

 

3、spring boot 項目中的單元測試問題

  spring boot 中集成了junite框架,對於單元測試,也不用寫各類繁瑣的類了,只須要對測試類進行必定的註釋,spring boot 便會幫你作好一切,就算是數據庫相關的操做,spring boot 也能很好地進行測試,具體仍是看代碼例子,下面是一個簡單的測試業務類方法的例子:

  首先,咱們新建一個service 層,新增一個demo類,最後的demo代碼以下:

@Component
public class ServiceDemo {
    public String testDemo(){
        String rtnAfterDosomething = "我是返回結果";
        //這裏是業務代碼
        return rtnAfterDosomething;
    }
}

  下面的代碼是測試類

@RunWith(SpringRunner.class)
@SpringBootTest
public class ServiceDemoTest {
    @Autowired
    ServiceDemo serviceDemo;
    @Test
    public void testDemo() {
        String rtn = serviceDemo.testDemo();
        Assert.assertEquals(rtn, "我是返回結果");
    }

}

  若是要測試數據庫dao,也是相似的,可是特別注意的是,測試以前必須啓動項目(即HelloSpringbootApplication的run方法必須運行起來),不然將會包can not find ApplicationContext的錯誤。

 

4、spring boot中配置數據庫框架(以mybatis爲例子)

  在spring boot中集成數據庫相關的開源框架也是很方便的(固然,記得在一開始新建項目的時候引用相關的jar包),當你上面的步驟都沒什麼錯誤的時候,你只須要簡單地配置下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對應的是和這個文件統計的resources
mybatis.config-location=classpath:mybatis-config.xml

  目錄的文件結構參考下面截圖:

  ok,mybatis 的引用配置便弄好了,下面咱們嘗試利用mybatis 這個數據庫框架,進行一個數據庫的簡單查詢操做,首先,看下面的mybatis-config.xml的配置內容,讀者能夠以這個爲模板進行配置,固然,想了解更具體的mybatis配置說明,建議去官網看看,這裏不展開了:

<?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>

  恩,而後,就能夠進行數據庫的操做了,我簡單用mysql建了個名字爲springboot的數據庫,在庫裏面建了一個簡單的demo表(具體怎麼建表那些不用我說了吧?實在沒有接觸過數據庫的同窗,能夠自行百度或者谷歌去咯),而後,dao代碼以下:

@Mapper
public interface DemoDao {
    @Select({"select demo_param from  demo "})
    String queryDemo();
}

  注意,mybatis 的dao是一個接口,關於mybatis更多的內容,請讀者參開官方文檔,這裏不展開了。

  而後,就在原來的ServiceDemo類中調用一下吧,代碼看下圖吧:

  

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 = "我是返回結果";
        //這裏是業務代碼
        return rtnAfterDosomething;
    }
    public String queryDemo(){
        return demoDao.queryDemo();
    }
}

  ok,簡單寫個測試類,出現小綠條,測試成功。

 

  而後,全部項目原型的工做完成了,而後,咱們就能夠進行咱們核心業務開發了,很快有沒有?很爽有木有?因此說,spring boot 搭建項目的確飛快,可讓咱們省去不少機械的前期操做,讀者們趕忙去探索下吧,spring boot ,你值得捅有!

  OK,今天總結到這裏,這個項目的代碼在gitHub上這個地址,須要的人自取:https://github.com/lcpandcode/helloSpringboot.git

  最後說一遍,spring boot ,用得真他媽爽!趕忙來吧!

相關文章
相關標籤/搜索