LoginSignup
6
6

More than 3 years have passed since last update.

超初心者がSpring入門の本を完走したので、自分なりにまとめてみる

Posted at

はじめに

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権限のみのページの表示のテストなどができる。

最後に

少し、内容の薄いまとめとなってしまったのですが、見返せるようにもう少し、理解を深めて改善していく努力をしたいと思います。

さいごまで読んでいただき、ありがとうございます。

誤字、脱字あったらコメントお願いします。

6
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
6