前言#
これを書くのは、SpringBoot フレームワークの入門記事を記録するためであり、ソースコードは見ていませんが、後で見ます。
SpringBoot フレームワークの学習には合計 9 時間かかりました。
基本的な使用法と redis、mysql の設定と使用法を学びました。
また、遭遇した問題なども記録しています。
パラメータとコメントおよび問題#
エントリーパラメータ#
@SpringBootApplication(scanBasePackages = "com.example")
// mybatis plusを参照し、mapperパッケージを同時にスキャン
@MapperScan("com.example.springbootlearn.mapper")
これらのコメントは通常、エントリーポイントに置きます。
SpringBootApplication 内のスキャンパッケージは、内部のコンポーネントやその他を自動的にスキャンできます。
MapperScan は mapper をスキャンするため、@Mapper の重複コメントを使用する必要はありません。
URL リクエストについて#
@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 は URL リクエストの簡易的な書き方で、PostMapping は POST リクエストの書き方です。
@RequestMapping(value = "Name", method = RequestMethod.POST)
URL レスポンスについて#
@ResponseBody // レスポンスボディ
このコメントをメソッドに追加する必要があります。XML と JSON 形式でレスポンスを返したい場合は、2 つのプラグインライブラリをインポートする必要があります。
// JSONレスポンスライブラリを参照
implementation 'org.springframework.boot:spring-boot-starter-json'
// XMLレスポンスライブラリを参照
implementation 'com.fasterxml.jackson.dataformat:jackson-dataformat-xml'
SpringBoot は accept リクエストに基づいて自動的に 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 での表現は次のとおりです:
@Data は lombok ライブラリのメソッドで、このライブラリは主に private 変数の setter と getter メソッドを自動生成します。
// lombok簡易開発ライブラリ 自動注入にはannotationProcessorを使用
annotationProcessor 'org.projectlombok:lombok'
// 同時にビルド時のパッケージもインポート
compileOnly 'org.projectlombok:lombok'
mybatis plus の使用方法#
-
データテーブルパラメータを含むクラスを定義します。
@Data public class User { private Long id; private String name; private Integer age; private String email; }
-
インターフェースを使用して 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'
コードファイルはすべて Github プロジェクトにあります。
これでほぼ入門が完了しました。残りはプロジェクトのソースコードを見ます。
テストアノテーション#
/*
テストによく使われるアノテーション
● @Test : メソッドがテストメソッドであることを示します。しかし、JUnit4の@Testとは異なり、その責任は非常に単一で、属性を宣言することはできません。拡張テストはJupiterが追加のテストを提供します。
● @ParameterizedTest : メソッドがパラメータ化テストであることを示します。下に詳細があります。
● @RepeatedTest : メソッドが繰り返し実行可能であることを示します。下に詳細があります。
● @DisplayName : テストクラスまたはテストメソッドに表示名を設定します。
● @BeforeEach : 各単体テストの前に実行されることを示します。
● @AfterEach : 各単体テストの後に実行されることを示します。
● @BeforeAll : すべての単体テストの前に実行されることを示します。
● @AfterAll : すべての単体テストの後に実行されることを示します。
● @Tag : 単体テストのカテゴリを示します。JUnit4の@Categoriesに似ています。
● @Disabled : テストクラスまたはテストメソッドが実行されないことを示します。JUnit4の@Ignoreに似ています。
● @Timeout : テストメソッドの実行が指定時間を超えるとエラーが返されることを示します。
● @ExtendWith : テストクラスまたはテストメソッドに拡張クラスの参照を提供します。
*/
// assertionsクラスを使用してアサーションを行うことができます。
/*
テストにパラメータを注入する
@ValueSource: パラメータ化テストに入力パラメータのソースを指定します。8つの基本クラスおよびString型、Class型をサポートします。
@NullSource: パラメータ化テストにnullの入力パラメータを提供します。
@EnumSource: パラメータ化テストに列挙型の入力パラメータを提供します。
@CsvFileSource:指定されたCSVファイルの内容をパラメータ化テストの入力パラメータとして読み込みます。
@MethodSource:指定されたメソッドの戻り値をパラメータ化テストの入力パラメータとして読み込みます(注意:メソッドの戻り値はストリームである必要があります)。
*/
// テストを使用