當(dāng)前位置:首頁(yè) > IT技術(shù) > 編程語(yǔ)言 > 正文

全網(wǎng)最細(xì)的SpringBoot系列教程-不一樣的Hello 小碼匠和老碼農(nóng)
2021-10-28 15:26:08

關(guān)于SpringBoot

第1篇:SprintBoot的前世今生稍后會(huì)奉上,本篇是SpringBoot系列的第2篇文章,在后面系列的教程中,會(huì)詳細(xì)分享SpringBoot生態(tài)圈中的各個(gè)成員,例如:

  • 最基礎(chǔ)的3層架構(gòu)
  • 訪問(wèn)數(shù)據(jù)庫(kù)的3種常用方案
  • MyBatis
  • MyBatis-Plus
  • fluent mybatis
  • NoSQL
  • Redis
  • MongoDB
  • ElasticSearch
  • 消息隊(duì)列
  • RabbitMQ
  • Kafka
  • RocketMQ
  • ...

系列教程特點(diǎn)

  • 主流:分享的都是主流的技術(shù)點(diǎn)
  • 詳細(xì):非常詳細(xì),會(huì)穿插各種小知識(shí)點(diǎn)
  • 全面:如前文所述,數(shù)據(jù)訪問(wèn)層會(huì)分享
  • MyBatis
  • MyBatis-Plus
  • fluent mybatis
  • sharding-JDB
  • 深度:會(huì)分享研發(fā)過(guò)程中需要注意的各種知識(shí)點(diǎn),比如日志輸出常遇到的坑,絕對(duì)的干貨

創(chuàng)建工程

  • Step1: 啟動(dòng)idea,我用的是IDEA Community Edition(不同版本,界面長(zhǎng)的會(huì)稍微有些差別),點(diǎn)擊【New Project】按鈕,就是下圖中的【+】圖標(biāo)

img

  • Step2:如下圖:
  • 選擇Maven
  • Project SDK:選擇你本地JDK版本,我本地安裝的是JDK11,想嘗鮮的同學(xué),可以安裝JDK的最新版本:JDK17
  • 設(shè)置好JDK后,按【Next】按鈕

img

  • Step3:下圖中設(shè)置項(xiàng)目的信息,點(diǎn)擊【Artifact Coordinates】會(huì)展開更詳細(xì)的信息

img

老碼農(nóng)設(shè)置的信息如下,根據(jù)你自己的項(xiàng)目實(shí)際情況,大家自行靈活調(diào)整

1.png

知識(shí)點(diǎn):關(guān)于GroupId

groupId一般分為多個(gè)段,段之間用【.】分割,通常

  • 第一段為域:比如org(非營(yíng)利組織)、com(商業(yè)組織)、cn(中國(guó))、top(國(guó)際通用頂級(jí)域名GTLD(Generictop-level domain top))等
  • 第二段為公司名稱:比如我的就設(shè)置成coderoldgeek
  • 第三段為項(xiàng)目名稱:我設(shè)置成的是【springboot】
  • 第四段可以是子項(xiàng)目名稱:我設(shè)置成的是【examples】

groupId不要隨便設(shè)置,最好和包結(jié)構(gòu)保持一致。

設(shè)置好這些信息,直接按【Finish】按鈕。

img

  • Step4: 項(xiàng)目開始創(chuàng)建,可能會(huì)需要幾秒鐘,創(chuàng)建好后,如下圖展示

img

  • Step5: 關(guān)于目錄結(jié)構(gòu)說(shuō)明
oldgeek-springboot-examples
├─.idea     
│─src
│ └─main
│   ├─java
│   ├─resources
│ └─test
└─pom.xml    

目錄詳細(xì)說(shuō)明參照下表:

2.png

關(guān)于Maven的詳細(xì)教程:老碼農(nóng)正在認(rèn)真整理,稍后會(huì)分享給大家。

創(chuàng)建子模塊

為什么要?jiǎng)?chuàng)建子模塊?

  • 本篇文章后面涉及的例子,其實(shí)不用創(chuàng)建子工程,直接在:src/main/java編寫代碼也可以完成。
  • 創(chuàng)建子模塊:后面會(huì)分享很多內(nèi)容,所以想按照知識(shí)點(diǎn)創(chuàng)建子工程,便于大家根據(jù)自己需要去參考。

創(chuàng)建子模塊

  • Step1: 右鍵選父工程:【oldgeek-springboot-examples 】連續(xù)點(diǎn)擊【New】 -> 【Module...】

img

  • Step2: 同樣,選擇【Maven】-> 【Module SDK】,按【Next】按鈕

img

  • Step3: 下圖中,只需要輸入Name即可,其他的不要修改
  • Name:springboot-hello

img

  • Step4: 創(chuàng)建子模塊,工程的目錄結(jié)構(gòu)如下
oldgeek-springboot-examples
├─.idea
├─springboot-hello
│ └─src
│   └─main
│      ├─java
│      └─resources
│   └─pom.xml 
│─src
│ └─main
│   ├─java
│   └─resources
│ └─test
└─pom.xml    

3.png

關(guān)于Maven的詳細(xì)教程:老碼農(nóng)正在認(rèn)真整理,稍后會(huì)分享給大家。

有些同學(xué)會(huì)有疑問(wèn)

父工程

  • src/main/java和src/main/resources/還有用嗎?可以刪掉嗎?
  • 答:如果按模塊創(chuàng)建工程,這兩個(gè)目錄可以刪掉
  • 父工程:pom.xml 文件可以刪掉嗎?
  • 答:不可以,這個(gè)有大用處,本篇文章暫時(shí)不展開,咱們徐徐來(lái),莫急

準(zhǔn)備編寫第一個(gè)能啟動(dòng)工程,激動(dòng)人心的時(shí)刻馬上就要來(lái)了,繼續(xù)跟著做

  • Step1: 依次點(diǎn)擊:【springboot-hello】-> 【src】-> 【main】-> 【java】按右鍵,如下圖,依次點(diǎn)擊 【New】-> 【Package】

img

  • Step2: 輸入如下的Package目錄信息 com.oldgeek.springboot.examples.hello

img

  • Step3: 創(chuàng)建啟動(dòng)類

4.png

創(chuàng)建過(guò)程,如下圖,右鍵選Package路徑【com.oldgeek.springboot.examples.hello】,依次【New】-> 【Java Class】

img

  • Step4: 輸入類名:HelloApplication,回車,啟動(dòng)類就創(chuàng)建好了

img

  • Step5: 本次我們要分享的是SpringBoot,接下來(lái)我們需要配置SpringBoot的包

打開子工程:springboot-hello/pom.xml文件,文件內(nèi)容如下。

<?xml version="1.0" encoding="UTF-8"?>
<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">
    <parent>
        <artifactId>oldgeek-springboot-examples</artifactId>
        <groupId>com.coderoldgeek.springboot.examples</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>springboot-hello</artifactId>

    <properties>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
    </properties>
</project>

我們添加和SpringBoot相關(guān)的依賴

  • 添加我們使用的SpringBoot版本,在屬性中定義版本信息
    <properties>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
        <!-- spring-boot version -->
        <spring-boot.version>2.5.0</spring-boot.version>
    </properties>
  • 添加SpringBoot依賴的包
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>${spring-boot.version}</version>
        </dependency>
    </dependencies>
  • 子工程完整的pom文件如下
<?xml version="1.0" encoding="UTF-8"?>
<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">
    <parent>
        <artifactId>oldgeek-springboot-examples</artifactId>
        <groupId>com.coderoldgeek.springboot.examples</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>springboot-hello</artifactId>

    <properties>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
        <!-- spring-boot version -->
        <spring-boot.version>2.5.0</spring-boot.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>${spring-boot.version}</version>
        </dependency>
    </dependencies>
</project>

重要知識(shí)點(diǎn):

  • 依賴包的版本盡量在屬性中定義定義,不要散落在各子工程中直接硬編碼,容易導(dǎo)致版本混亂
  • 盡量在父工程中定義,后面會(huì)講到,本篇不展開。
  • 不要添加沒(méi)有使用的依賴,用啥天啥,千萬(wàn)不要整太多垃圾。
  • 下面這張圖要注意,修改完pom.xml文件配置選項(xiàng),一般不會(huì)自動(dòng)刷新,需要按照下面步驟刷新,主要是從遠(yuǎn)端倉(cāng)庫(kù)獲取jar包,放到本地倉(cāng)庫(kù)。
  • 如下圖:選中工程,按右鍵,選擇【Maven】->【Reload project】,按下后,會(huì)去Maven中央服務(wù)器拉取我們所需要的jar包,拉取的時(shí)間看你當(dāng)時(shí)的網(wǎng)速,慢的話,可能需要幾分鐘。耐心等待就行。

img

  • Step6: 編寫啟動(dòng)類代碼,完整代碼如下
package com.oldgeek.springboot.examples.hello;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class HelloApplication {
    public static void main(String[] args) {
        SpringApplication.run(HelloApplication.class, args);
    }
}
代碼解釋:
  • 啟動(dòng)類添加注解:@SpringBootApplication
  • Main方法中調(diào)用SpringApplication.run(HelloApplication.class, args);
  • SpringBoot實(shí)例初始化完成后,就會(huì)調(diào)用run方法啟動(dòng)服務(wù)。

延伸知識(shí)點(diǎn):我們可以看下SpringBootApplication是SpringBoot的核心注解,他是一個(gè)組合注解,我們可以查看注解的源代碼,截取部分源代碼,源代碼的分享不是本篇文章重點(diǎn)。

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
  @Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {
  • SpringBootConfiguration:如下源代碼,繼承自:Configuration,此注解是個(gè)配置類,容器啟動(dòng)時(shí)會(huì)配置初始化參數(shù)
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Configuration
@Indexed
public @interface SpringBootConfiguration
  • EnableAutoConfiguration:?jiǎn)?dòng)SpringBoot自動(dòng)配置機(jī)制,根據(jù)pom包中依賴為當(dāng)前項(xiàng)目自動(dòng)進(jìn)行配置,例如,添加了 spring-boot-starter-web 依賴,會(huì)自動(dòng)添加 Tomcat 和 Spring MVC 的依賴,那么 Spring Boot 會(huì)對(duì) Tomcat 和 Spring MVC 進(jìn)行自動(dòng)配置。
  • ComponentScan:掃描包的配置,注意:他會(huì)自動(dòng)掃描同級(jí)目錄或者下級(jí)包里的Bean,所以本入口類建議放置在 grounpID + arctifactID 組合的包名下,我們是:com.oldgeek.springboot.examples.hello
  • Step7: 點(diǎn)擊啟動(dòng)類:HelloApplication,按右鍵,選擇【Run 'HelloApplication.main()'】開始啟動(dòng)咱們的工程。

img

  • Step8: 若果你能看到如圖所示的畫面,恭喜你,大概率工程是已經(jīng)正常啟動(dòng)了。

img

  • 小知識(shí)點(diǎn)
  • 出現(xiàn)問(wèn)題,先看日志,養(yǎng)成看日志習(xí)慣
  • 日志從下往上看,容易定位問(wèn)題

  • Step9: 我們?cè)囍L問(wèn)下,打開你的瀏覽器,輸入:http://localhost:8080,點(diǎn)回車,悲劇,下面畫面會(huì)出現(xiàn) 沒(méi)關(guān)系,我們現(xiàn)在只是把服務(wù)啟動(dòng)了,還沒(méi)給他添加任何業(yè)務(wù)邏輯呢,自然會(huì)掛。

img

添加業(yè)務(wù)邏輯

  • Step1: 選中Package:com.oldgeek.springboot.examples.hello,【New】->【Package】

img

向下圖輸入:controller,完整的package:com.oldgeek.springboot.examples.hello.controller

img

  • Step2: 添加控制類:HelloController

img

選中controller,點(diǎn)擊右鍵:【New】->【Java Class】,創(chuàng)建控制類

img

輸入控制類名字:HelloController

img

  • Step3: 編寫業(yè)務(wù)邏輯
package com.oldgeek.springboot.examples.hello.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class HelloController {
    /**
     * Hello World
     */
    @GetMapping("hello")
    @ResponseBody
    public String hello() {
        return "歡迎您光臨小碼匠和老碼農(nóng)的SpringBoot家園<br>未來(lái)的日子中,我們一起學(xué)編程,一起分享技術(shù)";
    }
}

代碼說(shuō)明:

  • 注解:@Controller:控制器Controller負(fù)責(zé)處理由DispatcherServlet 分發(fā)的請(qǐng)求,它把用戶請(qǐng)求的數(shù)據(jù)經(jīng)過(guò)業(yè)務(wù)處理層處理之后封裝成一個(gè)Model ,然后再把該Model 返回給對(duì)應(yīng)的View 進(jìn)行展示。
  • 注解:@GetMapping("hello"):定義Request請(qǐng)求和Controller 方法之間的映射,此處我們是用Get方式請(qǐng)求
  • 注解:@ResponseBody:把處理的結(jié)果直接寫入 HTTP response body 中,返回給調(diào)用方
  • Step4:
  • 重新啟動(dòng)服務(wù)
  • 訪問(wèn),再次啟動(dòng)瀏覽器,地址欄中輸入:http://localhost:8080/hello

img

特別關(guān)注

  • pom中添加新依賴時(shí),要執(zhí)行maven的【Reload Project】操作,不然很可能編譯失敗
  • groupId和artifactId的命名規(guī)則,不要隨意命名,專業(yè)人士做專業(yè)事

關(guān)注公眾號(hào)【小碼匠和老碼農(nóng)】收獲小碼匠和老碼農(nóng)精心挑選的電子書

  • 回復(fù): java, 獲得Java基礎(chǔ)教程
  • 回復(fù): jvm, 獲得JVM資料
  • 回復(fù): springboot, 獲得SpringBoot資料
  • 回復(fù): springcloud, 獲得springcloud資料
  • 回復(fù): python, 獲得Python資料
  • 回復(fù): 算法, 獲得算法資料

本文摘自 :https://blog.51cto.com/u

開通會(huì)員,享受整站包年服務(wù)立即開通 >