【Java】Spring BootとMySQLを使ったREST API構築入門 - データベースからテーブルのデータを取得する

この記事では、`build.gradle` に必要な依存関係を追加済みの状態で、Spring BootアプリケーションからMySQLデータベースに接続し、`test_table` テーブルのデータを取得するREST APIを構築する手順について解説します。

## 準備

### 1. テーブル作成
A5でテーブルを作成し、データを投入しておく。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3782903/b4727166-7b6b-6634-f36b-14c58ba894a1.png)

## 手順

### 1. `TestTable` エンティティの作成

まず、データベースの `test_table` テーブルに対応するJavaクラスを作成します。このクラスはJPAのエンティティとして設定され、Spring Data JPAがデータベースのテーブルとマッピングを行います。

#### エンティティクラスコード例

```java
package com.example.demo.entity;

import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.Table;

@Entity
@Table(name = "test_table")
public class TestTable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
    private String createDatetime;
    private String updateDatetime;

    // GetterとSetter
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getCreateDatetime() {
        return createDatetime;
    }

    public void setCreateDatetime(String createDatetime) {
        this.createDatetime = createDatetime;
    }

    public String getUpdateDatetime() {
        return updateDatetime;
    }

    public void setUpdateDatetime(String updateDatetime) {
        this.updateDatetime = updateDatetime;
    }
}
```

- `@Entity` と `@Table(name = "test_table")` アノテーションにより、`test_table` テーブルと対応するエンティティを定義。
- `@Id` と `@GeneratedValue` は主キー（`id`フィールド）の自動生成戦略を指定します。

### 2. `TestTableRepository` インターフェースの作成

次に、Spring Data JPAが提供する `JpaRepository` を使ってリポジトリインターフェースを定義します。

#### リポジトリインターフェースコード例

```java
package com.example.demo.repository;

import com.example.demo.entity.TestTable;
import org.springframework.data.jpa.repository.JpaRepository;

public interface TestTableRepository extends JpaRepository<TestTable, Long> {
}
```

- `JpaRepository<TestTable, Long>` を継承することで、基本的なデータアクセスメソッド（CRUD操作）を自動的に利用できるようになります。
- SQLを記述せずに、データベースからデータを取得したり保存できるのがポイントです。

### 3. `TestTableController` の作成

次に、コントローラークラスを作成し、`TestTableRepository` を使ってデータを取得するエンドポイントを定義します。

#### コントローラーコード例

```java
package com.example.demo.controller;

import com.example.demo.entity.TestTable;
import com.example.demo.repository.TestTableRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
public class TestTableController {

    @Autowired
    private TestTableRepository testTableRepository;

    @GetMapping("/test-table")
    public List<TestTable> getAllTestTableData() {
        return testTableRepository.findAll();
    }
}
```

- `@RestController` アノテーションでコントローラーを定義し、SpringがHTTPリクエストを処理するクラスであることを示します。
- `@GetMapping("/test-table")` アノテーションで、`GET` メソッドのエンドポイント `/test-table` を指定。エンドポイントにアクセスすると、`test_table` のデータが `JSON` 形式で返されます。

### 4. アプリケーションを起動して確認

Spring Boot アプリケーションを起動し、ブラウザまたはツールを使って、以下のURLにアクセスしてデータを確認します。

```
http://localhost:8080/test-table
```

### 5. 結果の確認

ブラウザやPostmanなどのツールでエンドポイントにアクセスすると、`test_table` に格納されているデータがJSON形式で表示されます。以下のようなJSONデータが返されることが期待されます。

```json
[
    {
        "id": 1,
        "name": "tanaka",
        "createDatetime": null,
        "updateDatetime": null
    },
    {
        "id": 2,
        "name": "suzuki",
        "createDatetime": null,
        "updateDatetime": null
    },
    {
        "id": 3,
        "name": "sato",
        "createDatetime": null,
        "updateDatetime": null
    }
]
```

---

以上で、Spring BootアプリケーションとMySQLデータベースが連携し、`test_table` のデータを取得できるREST APIが構築されました。SQL文を直接記述することなく、Spring Data JPAのリポジトリを利用してデータの取得が可能になり、効率的な開発が実現できます。