SpringBootとJPAを使ってDBにInsertするための８つのこと

# SpringBootとJPAを使ってDBにInsertするための８つのこと
**目次**
0. 今回の目的
1. SpringBootのプロジェクト作成
2. MysqlにDBを用意する
3. PropertiesFileの設定
4. Entityクラスの用意
5. Repositoryクラスの用意
6. Serviceクラスの用意
7. Controllerクラスの用意
8. curlを使って確認
9. おわり


## 0. 今回の目的
- **SpringBootを始めたばかりの時に、JPAを使ってDBにInsertするだけのことが出来なくて
猫にも分かる記事がなかったのであの時の自分に向けて書く。**
- 特別JPAについての説明などはないです、ただただDBにInsertすることを記事にしただけです。

## 1. SpringBootのプロジェクト作成
- 先ずはSpringBootのプロジェクトを作成します
- [SPRING INITIALIZRにアクセスする](http://start.spring.io/)
- Generate a **[Gradle Project]** with **[Java]** and Spring Boot **[1.5.9]**
 に設定する
- **[Group]**と**[Artifact]**は適当でどうぞ。今回はGroup名は**[com.jpa]**にArtifact名は**[demojpa]**にします。
- **[Dependencies]**には**[Web]****[MySql]****[JPA]****[lombok]**を設定します。
- 以上で**[Generate Project]**で作成してください。
- 作成されたプロジェクトを展開してIDEでOPENする。（今回はInteliJ IDEAを使用）

## 2. MysqlにDBを用意する
- MySqlにJPAのテスト用のDBを用意する。
- 今回はこのような構成で用意しました。
- DB名は**[jpa_test]**

```mysql
CREATE TABLE `members` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(255) NULL,
  PRIMARY KEY (`id`));

```

| id | name |
|:-:|:-:|
|  1 |  hoge |

## 3. PropertiesFileの設定
- IDEを開く
    - srcのmain直下の**[resources]**の**[application.properties]**を開く
    - 以下の３行のおまじないを書き、MySqlに繋げるようにしておく。
        - spring.datasource.url=jdbc:mysql://localhost:3306/jpa_test
        - spring.datasource.username= MySqlのusername
        - spring.datasource.password= MySqlのpassword

## 4. Entityクラスの用意
- srcのmain直下に**[domain]**Packageを作成する。
- **[domain]**Packageの中に**[Members.java]**を作成して以下のコードを記述する。

```java
package com.jpa.demojpa.domain;

import lombok.Data;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

@Data
@Entity
public class Members {
    @Id
    @GeneratedValue
    private Integer id;
    private String name;
}

```

## 5. Repositoryクラスの用意
- **[domain]**Packageの中に**[MembersRepository.java]**を作成して以下のコードを記述する。

```java
package com.jpa.demojpa.domain;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface MembersRepository extends JpaRepository<Members, Integer> {
}

```

## 6. Serviceクラスの用意
- srcのmain直下に**[service]**Packageを作成する。
- **[service]**Packageの中に**[MembersService.java]**を作成して以下のコードを記述する。

```java
package com.jpa.demojpa.service;

import com.jpa.demojpa.domain.Members;
import com.jpa.demojpa.domain.MembersRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

@Service
@RequiredArgsConstructor
public class MembersService {
    private final MembersRepository membersRepository;

    public String create() {
        Members members = new Members();
        members.setName("hoge");
        membersRepository.save(members);
        return "success!!";
    }
}

```

## 7. Controllerクラスの用意
- srcのmain直下に**[web]**Packageを作成する。
- **[web]**Packageの中に**[MembersController.java]**を作成して以下のコードを記述する。


```java
package com.jpa.demojpa.web;

import com.jpa.demojpa.service.MembersService;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/members")
@RequiredArgsConstructor
public class MembersController {
    private final MembersService membersService;

    @PostMapping
    public String create() {
        return membersService.create();
    }
}

```

## 8. curlを使って確認
- ターミナルを開き以下のcurlで確認する。

```bash
curl http://localhost:8080/members
```

- **[success!!]**が返ってくるはずです、返ってきたらMySqlを確認してください。

## 9. おわり
- 以上で***SpringBootとJPAを使ってDBにInsertするための８つのこと***終了です。
- あとは**[findOne]****[save]****[delete]**とかがJpaRepositoryには用意されているので使ってみてください。

```java
membersRepository.findOne(1);
membersRepository.save(members);
membersRepository.delete(1);
```