StarYuhen

StarYuhen

SpringBoot超簡易入門

前言#

寫這個是為了記錄自己入門學習 SpringBoot 框架的入門文章,並沒有看源碼之類的,哪些後面再看。

學習 SpringBoot 框架總計用了 9 個小時。

學會了基礎的使用和 redis,mysql 的配置使用。

還有記錄遇到的坑之類的


參數及註釋和坑#

入口參數#

@SpringBootApplication(scanBasePackages = "com.example")
// 引用mybatis plus 同時掃描mapper包
@MapperScan("com.example.springbootlearn.mapper")

這兩個註釋我通常放在入口處。

SpringBootApplication 內的掃描包,可以自動掃描裡面的組件及其他

MapperScan 則是掃描 mapper,則不需要繼承的函數使用 @Mapper 的重複註釋


關於網址請求#

@RestController

這個是路由的控制層,是 @Controller @ResponseBody 合併一起的簡易方式

    @GetMapping("/get/{id}/test/{name}")
    public Map<String, Object> GetPathController(
            @PathVariable("id") Integer id,
            @PathVariable Map<String, String> PathMap,
            @RequestHeader("User-Agent") String Agent,
            @RequestHeader Map<String, String> HeaderMap,
            @RequestParam("age") Integer age,
            @RequestParam Map<String, String> ParamMap,
            @CookieValue("test") String test
    ) {
    @PathVariable 獲取請求路徑對應的值
        還可以使用Map接收傳來的所有值,如Map<String,String>
    @RequestHeader 獲取請求的頭部參數,User-Agent 表示獲取請求的瀏覽器標識
        還可以使用Map接收傳來的所有值,如Map<String,String>
    @RequestParam 獲取請求的Param值,如Get的/get/test?age=10&name="Test"
    @CookieValue 獲取請求的Cookie值
    @RequestAttribute 獲取域屬性
    @RequestBody 獲取post請求的Json值 會自動序列化

其中的 GetMapping 則是網址請求的簡易寫法,PostMapping 則是 Post 請求的寫法。

    @RequestMapping(value = "Name", method = RequestMethod.POST)

關於網址響應#

    @ResponseBody // 響應body

則需要在方法上加上這個註釋,我們想要響應 xml 和 json 形式則是需要導入兩個插件庫

    // 引用響應json庫
    implementation 'org.springframework.boot:spring-boot-starter-json'
    // 引用響應xml庫
    implementation 'com.fasterxml.jackson.dataformat:jackson-dataformat-xml'

SpringBoot 會自動根據 accpet 的請求來自動判斷返回 xml 還是 json 數據,其中需要開啟配置。

# accept
spring.mvc.contentnegotiation.favor-parameter=true

自定義組件#

@Component

使用這個註釋就完事,同時還可以自定義,往裡面加指定的類就行

@Import({AsyncAppender.class})

  @Bean("PetConfig")

這個註釋則是聲明容器組件的指定 ID,相當於名字。

還有一種過濾參數:

// 設置當容器中有該組件,此配置類代碼才生效,進行組件注入,談過沒有指定組件,註釋下面的代碼全部無法使用
// 如:此配置類沒有PetConfig的組件,則MyConfig全部無法使用,若在方法前面加上該註釋,沒有滿足條件則會該方法無法使用
@ConditionalOnBean(name = "PetConfig")

當我們需要判斷其中的組件是否使用,或者查看使用哪些組件,可以在 SpringBoot 的入口處查看:

//        ConfigurableApplicationContext run = SpringApplication.run(SpringBootLearnApplication.class, args);
        // 查看框架使用的組件
//        String[] GetSpringBootName = run.getBeanDefinitionNames();
//        for (String Name : GetSpringBootName) {
//            System.out.println(Name);
//        }
//        // 獲取指定組件
//        Pet pet = run.getBean("PetConfig", Pet.class);
//        System.out.println(pet);
        // 獲取容器中有沒有指定組件
//        boolean Pet = run.containsBean("PetConfig");
//        System.out.println(Pet);

如何自定義讀取配置 yaml#

// 獲取配置文件信息,由於是有前綴的形式,所以需要使用此函數
@PropertySource(value = "classpath:application.yaml")
@ConfigurationProperties(prefix = "database")
// 使用註釋自行注入setter和getter 方法,雖然可以自動生成,但是還是可以用lombok方法
@Data

這裡表示的註釋在 yaml 的表示為:

91bf9aae-6385-4542-95ef-9c1045cf3e26.png

@Data 是 lombok 庫的方法,這個庫更多的是提供 private 變量的 setter 和 getter 方法,自動生成

    // lombok 簡易開發庫 自動注入就用  annotationProcessor導入
    annotationProcessor 'org.projectlombok:lombok'
    // 同時導入build時的包
    compileOnly 'org.projectlombok:lombok'

如何使用 mybatis plus#

  1. 定義一個包含數據表參數的類

    @Data
    public class User {
        private Long id;
        private String name;
        private Integer age;
        private String email;
    }
    
  2. 使用接口繼承 mybatis plus 的類

    @Component
    public interface UserMapper extends BaseMapper<User> {
    
    }
    
    

需要使用的庫的配置:

implementation 'org.springframework.boot:spring-boot-starter-data-jdbc'
    // 使用數據庫管理池 阿里的,又一個kpl項目 需要指定版本
    // implementation 'com.alibaba:druid:1.2.15' 使用spring框架官方版
    implementation 'com.alibaba:druid-spring-boot-starter:1.2.15'
    // 引用java mysql 驅動
    implementation 'mysql:mysql-connector-java'
    // 引用mybatis
    implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:3.0.1'
    // 引用mybatis-plus https://baomidou.com/pages/24112f/#%E6%94%AF%E6%8C%81%E6%95%B0%E6%8D%AE%E5%BA%93
    implementation 'com.baomidou:mybatis-plus-boot-starter:3.5.3.1'

之所以展示出來配置,是因為部分情況可能找錯包,這裡對應一下。

想要使用 SpringBoot 和 Mybatis plus 的測試包,配置則是需要寫入:

    // 引用SpringBoot測試庫
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    // 引用mybatis plus 測試庫
    testImplementation 'com.baomidou:mybatis-plus-boot-starter-test:3.5.3.1'

Mybatis plus 的文檔


代碼文件均在 Github 項目.

這樣差不多就入門了,剩下的我去看項目源碼。


測試註釋#

/*
測試常用註釋
● @Test :表示方法是測試方法。但是與JUnit4的@Test不同,他的職責非常單一不能聲明任何屬性,拓展的測試將會由Jupiter提供額外測試
● @ParameterizedTest :表示方法是參數化測試,下方會有詳細介紹
● @RepeatedTest :表示方法可重複執行,下方會有詳細介紹
● @DisplayName :為測試類或者測試方法設置展示名稱
● @BeforeEach :表示在每個單元測試之前執行
● @AfterEach :表示在每個單元測試之後執行
● @BeforeAll :表示在所有單元測試之前執行
● @AfterAll :表示在所有單元測試之後執行
● @Tag :表示單元測試類別,類似於JUnit4中的@Categories
● @Disabled :表示測試類或測試方法不執行,類似於JUnit4中的@Ignore
● @Timeout :表示測試方法運行如果超過了指定時間將會返回錯誤
● @ExtendWith :為測試類或測試方法提供擴展類引用
 */
// 可通過assertions類進行斷言
/*
 往測試裡面注入參數
@ValueSource: 為參數化測試指定入參來源,支持八大基礎類以及String類型,Class類型
@NullSource: 表示為參數化測試提供一個null的入參
@EnumSource: 表示為參數化測試提供一個枚舉入參
@CsvFileSource:表示讀取指定CSV文件內容作為參數化測試入參
@MethodSource:表示讀取指定方法的返回值作為參數化測試入參(注意方法返回需要是一個流)
 */
// 使用測試
載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。