SpringBoot DBの利用

pom.xmlに以下のコードを追加。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
        
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>

<dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-jasper</artifactId>
</dependency>
        
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>6.0.2</version>
</dependency>




エンティティクラスの作成(City.java


@がつくのはアノテーションと呼ばれる。


PlanInfo.javaに@Entityを加える。
@EntityはDBのデータをクラスとして扱えるようにする。


@Idは、プライマリキーを意味する。


@GeneratedValueは、値を自動的に生成してくれる。


@Columnは、このメンバ変数はテーブルのこの列に対応していますよ、という意味(name=で実際の列名を指定する)。
nullable=falseをつけると NOT NULLの意味になる。
DBの情報に「Null」がNoになっていたら、false。
Yesだったら、true を指定する。

ex)@Column(name="START_DATE")


implementsされているSerializableとは、保存可能なオブジェクト。


private static final long serialVersionUID = 1L;

は、「シリアルバージョンUID」というもの。
シリアライズ = オブジェクトを保存すること。
シリアライズ = 再読み込みする機能。
シリアライズする際に、変更されている可能性がある(保存→再読み込み の間に変更があるかも)。
そこで、保存する際に、UIDを保存→再読み込みされた時のUIDを取得→両者比較→異なった時に例外を投げる


エンティティクラスを作成するには、
@Entity
@Id
public ~() {}

の三つがセットになる。




JpaRepositoryインターフェイスの作成(CityRepository.java

extends JpaRepository<扱うエンティティクラス, プライマリーキーの型>

このインターフェイスの中には基本的に何も入れない。

JpaRepositoryは、データベースにアクセスするために必要らしい。




Controllerをいじる(SampleController.java

@Autowired
    private PlanService planService;

@Autowiredは、自動で初期化されるフィールド。
コンストラクタやフィールドの右辺に、フィールドの初期化処理を書かなくてよくなる?


@ResponseBodyとは、戻り値で直接レスポンスのコンテンツを返すことができる。
つまり、これがついてるメソッドにアクセスしたら、レスポンスが返ってくるということ。

ちなみに、
@RestController = @Controller + @ResponseBody
と、いうことらしい。


@Transactionalは、宣言的にトランザクション制御を記述できる。

(readOnly = true) とは読み取り専用のトランザクション


トランザクション処理とは、
複数の処理を意味的に一つの処理として扱うこと。




Application(SampleDataJpaApplication.java

@EnableJpaRepositoriesは、JPAリポジトリを有効にするためのアノテーション