【springboot アノテーション一覧とimport文】

現時点で調べたり使ったりしてるアノテーションの備忘録です！
すぐ忘れちゃうので（笑）
#### ＠RestControllerと＠Controller
```
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {

    @GetMapping("/hello")
    public String sayHello() {
        return "Hello, World!";
    }
}
```

実行結果
```
"Hello, World!"
```
＠RestControllerは、SpringフレームワークでREST APIを作成するためのアノテーション。これを使うと、ブラウザやクライアントアプリケーションにデータを返すエンドポイントを簡単に作成できます
※エンドポイントはソフトウェアが外部に公開している機能や、APIなどの所在を示す識別名、ネットワーク上でのアドレス、またはURL/URIなどを指す。フロント側からアクセスする場所
＠Controllerは通常のWebページ（HTML）を返すために使うが、＠RestControllerはJSONやXMLのようなデータを返すために使う。

#### ＠GetMapping
```
import org.springframework.web.bind.annotation.GetMapping;

@GetMapping("/home")
public String showHomePage() {
    return "お家";
}
```

リクエストに対して、どんな応答を返すかを決めるのが＠GetMapping。
「http://localhost:8080/home」
のリクエストが来たら、「お家」と返すようにと書いてある。登録されているデータを取得する役割を果たす。

#### ＠RequestMapping
```
import org.springframework.web.bind.annotation.RequestMapping;
```
このクラスに書かれてるすべてのAPIはここに書かれてるURLでアクセスするという意味
例）＠RequestMapping("training/test")と書いたらローカルホストの後ろに/training/testを付けたら表示されるようになる。

#### ＠PostMappin
新しいデータを登録する役割を果たす。（INSERT処理）

#### ＠DeleteMapping
登録されている値を削除する役割を果たす。（DELETE処理）
例）Qiitaからユーザーを削除する／Qiitaへの投稿を削除するetc...

#### ＠PutMapping
既存データの上書きをする役割を果たす。（UPDATE処理）
例）Qiitaの記事を修正する／Qiitaのユーザーデータを修正するetc...

#### ＠Autowired
```
import org.springframework.beans.factory.annotation.Autowired;

@Autowired
private ThreadsRepositry threadsRepositry;
```
springフレームワークの依存性注入機能を利用するためのアノテーション。今回なら、ThreadsRepositry.javaのファイルに書いてある処理を呼び出せる。フ2個目のァイル名　クラス名なので2個のスレッドレポジトリのtは小文字。
※依存性注入は簡単に言うと使いたいクラスを勝手に持ってきてくれる感じ。使い方は3種類ある。
・セッターインジェクション（使い道なし）
・フィールドインジェクション（非推奨）
・コンストラクタインジェクション（推奨）

#### private final static Logger logger = LoggerFactory.getLogger(MainController.class);
```
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

private final static Logger logger = LoggerFactory.getLogger(MainController.class);
```

Javaでアプリケーションのロギング（ログ出力）を行うために、Loggerオブジェクトを作成するコード。最後のメインコントロールはクラス名に変える。インポートの分も一緒に書く。
デバックの作業がこれらしい。

#### ＠Entity
```
import jakarta.persistence.Entity;
```
Entityクラスをつくるという意味。データベースのテーブルやデータをプログラム内で表現するためのクラス。とりあえずデータベースのテーブルを使いたいときに書く。javabeansみたいなやつ。

#### ＠Table
```
import jakarta.persistence.Table;
```
データベースのテーブル名や設定を管理するためのアノテーション

#### ＠Id
```
import jakarta.persistence.Id;
```
主キーの設定

#### ＠Column
カラム名を指定

#### ＠Repository
```
import org.springframework.data.jpa.repository.JpaRepository;
```
Spring MVCでデータ層のクラス（DAO等のDBアクセスを行うクラス）に付与する

#### ＠Controller
Spring MVCでコントローラー層のクラスに付与する。主な役割は画面遷移の制御、ドメイン層の Service の呼出 (主処理を実行する)。

#### ＠Service
```
mport org.springframework.stereotype.Service;
```
Sping MVCでサービス層のクラス（ビジネスロジック等）に付与する。
Service は業務処理を提供する。

#### ＠Data
```
import lombok.Data;
```
getterとsetterを省略できる

#### ＠ManyToOne
```
import jakarta.persistence.ManyToOne;
```
多くのエンティティが1つのエンティティに関連

#### ＠OneToMany
```
import jakarta.persistence.OneToMany;
```
1つのエンティティが複数のエンティティに関連

#### ＠ManyToMany
多くのエンティティが多くのエンティティに関連

#### ＠JoinColumn
```
＠JoinColumn(name="room_id")
private Room room;
外部キーとして、room_idを使用する。
```

#### ＠Query
```
import org.springframework.data.jpa.repository.Query;
```
特定の条件でフィルタリングしたデータを取得したい場合や、結合テーブルから特定のカラムを選択したい場合に便利な奴。複雑なデータ操作が可能。リポジトリクラスで使う。＠Query(value =SQL文）って感じでvalue=って書くとSQL分を直書きできる。

#### ＠Param
```
import org.springframework.data.repository.query.Param;
```

#### ＠RequestParam
ブラウザからのリクエストの値（パラメータ）を取得することができるアノテーション。

#### ＠RequestBody
リクエストのボディを指定したオブジェクトにマッピングしてくれる。POSTリクエストでJSONデータを受け取る場合。

#### ＠PathVariable
URLの一部をメソッドの引数として受け取るために使用する、＠PathVariable を使う。
```
＠GetMapping("/{id}")
public String getProduct(@PathVariable int id) {
    return "商品ID: " + id;
}
動作例
GET /products/1 → "商品ID: 1"
GET /products/10 → "商品ID: 10"
```

#### ＠PathVariable
URLのパス部分をパラメーターとして取得してくれる
```
import org.springframework.web.bind.annotation.PathVariable;

＠DeleteMapping("/comments/{id}")//commentのidを指定して消せるようにしたい
    public String deleteComments(@PathVariable Integer id){
        commentsService.delete(id);
        return "deleted successfully!";
        ```
GETリクエストとDELETEリクエストでは使えるけど、PUTリクエストとPOSTリクエストには使えなくはないけど一般的じゃない。詳細は別途記入。