はじめに
Springの本完走致しました!!
本のURL
私なりに、軽くまとめてみようと思います。
日本語が拙い部分があったり、知識が足りていない部分がありますが、読んでいただけるとありがたいです。
環境について
OpenJDK14.0.2
STS4?
Maven3.6?
あと、STSにLombokいれてました。
DI(依存性の注入)
- インスタンスの生成
- インスタンスのライフサイクル管理
DIが主にこの2つをしてくれている。
DIをすること(利用する?)ことで、newでインスタンス生成して変数に入れ込むという手間が省けたり、
使い終わった変数にnull
を入れ忘れることの防止もできる。
Autowiredについて
Autowiredをつけておくと、自動でインスタンスを生成してくれます。(DIの対象のアノテーションがついているクラスは自動生成されるらしい。)
シングルトンらしいので、エラーが起きやすかった気がします。
同じ型のBeanがDIコンテナに複数登録されている場合にエラーがおきるので気をつけてください。
回避するためには、@Qualifier
をつかって名前(ファイル名)を指定してあげると回避することができる。
GetMapping,PostMapping
GetMapping->指定したURLにGETリクエストでアクセスされた場合の処理(データを取得)
PostMapping->指定したURLにPOSTリクエストでアクセスされた場合の処理(データを登録)
@Data
Dataアノテーションをつけるとgetter、setterを自動生成してくれる。(Lombokの機能)
仕様変更の際に、臨機応変な対応が取れる。
バリデーション
フォームのクラスの各フィールドにアノテーションをつけるだけで、バリデーションの実装ができる。
バリデーションについて
↑このサイトに種類の説明書いてあります。
@validated
をバリデーションをしたいmodelの引数につけるだけで、バリデーションが実行される。
AOP(アスペクト指向プログラミング)
各クラスで共通する処理を抜き出して。まとめて管理すること。
Advice(処理内容),PointCut(実行場所),JointPoint(実行タイミング)
私が使っていた本では、コントローラーの実行時などにコンソールにメッセージを出すのに使っていました。どのコントローラーを実行してるかとか、表示してくれます。
JDBC
Springで主にデータベースを取り扱うときに使う。
- insert(追加)
- update(更新)
- select(取得)(複数、1件)
- delete(削除)
登録、更新、削除 -> updateメソッド
データのカウント -> queryForObjectメソッド
1件取得のselect文 -> queryForMapメソッド
複数件取得のselect文 -> queryForListメソッド
応用
-
RowMapper
RowMapperを継承して、実装する。
同じようなSELECT文がたくさんあるときなどに使うと、コードの可読性が上がる。Mapperのクラスの処理でSELECT文の結果をインスタンスにセットして、戻り値として返してくれる。 -
BeanRowMapper
RowMapperを用意しなくても、実装可能。
機能的には、上と同じ
自動マッピングができる。
しかし以下のようにしなければ、ならない。 -
カラム名 -> user_id(アンダースコアで区切る)(スネークケース)
-
フィールド名 -> userId(2つ目の単語から大文字にする)(キャメルケース)
-
ResultSetExtractor
ResultSetExtractor>を継承して実装。
複数件のselect結果をオブジェクトにマッピングする場合に使う。
配列で、データを返してくれる。 -
RowCallbackHandler
コールバック処理。処理を依頼して、その処理が終わった後に、結果を受け取り、次の処理が動き出す。データを取得してから、そのデータを次の処理に使いたい場合などに利用する。
たとえば...
ユーザー一覧画面から、CSVを出力するなど。
(CSVを出力するには、ユーザー一覧のデータが必要なので、取得してから、次の処理へ進む。) -
NamedParameterJdbcTemplate
SQL文に、?を用いて、引数を渡しているが、NamedParameterJdbcTemplateでは、:キー名で指定する。
SQL文に入れるパラメーターを設定するために、SqlParameterSourceクラスを使い、addValue()メソッドにキーと値をセットしていく。
エラーについて
Modelからキーを指定すると、エラー内容の詳細を取得できる。
- ${status} -> HTTPのエラーコードが格納されている。
- ${error} -> HTTPのエラー概要が表示される。
- ${message} -> エラーメッセージが表示される。
共通のエラーページだけでなく、エラーのステータス毎に応じたテンプレートを適用することもできる。
RESTについて
HTTPリクエストに対して、JSONなどを返すサービス。
REST用コントローラを作成、クラスに@RestContorllerをつける
@RestControllerをつけると、そのクラスのメソッドの戻り値を呼び出しもとに返す。
PUTメソッド -> @PutMapping
DELETEメソッド -> @DeleteMapping
JUnitについて(SpringTest)
javaでテストを自動化できるライブラリ
テスト用のアノテーションをつけるだけで、テスト用のクラスになる。
@RunWith(SpringRunner.class) -> テストをどのクラスで実行するか指定できる。
@SpringBootTest -> SpringBootを起動してから、テストを始めてくれる。
@Sql -> 指定したSQLを実行した後の状態でテストされる。
コントローラのテストには、モックを利用してテストを行う。
@WithMockUserを使うことによって、Admin権限のみのページの表示のテストなどができる。
最後に
少し、内容の薄いまとめとなってしまったのですが、見返せるようにもう少し、理解を深めて改善していく努力をしたいと思います。
さいごまで読んでいただき、ありがとうございます。
誤字、脱字あったらコメントお願いします。