JPA・Spring Data JPAとは?
JPA(Java Persistence API)とは、Jakarta EE(Java EE)標準のORマッパーで、JPAは仕様(Interface)のみ提供し、その実装はJPAプロバイダより提供される。
Spring Data JPAとは、Springフレームワーク群のSpring Dataファミリー内のデータベースプロジェクトの1つで、その名のとおりJPAをベースとしており、JPAを使いやすくラップしたものがSpring Data JPAである。
1.プロジェクトを作成する
① ブラウザを開き、(https://start.spring.io/) を入力し、開く
② 下記を入力し、Dependenciesで下記を選択し、『GENERATE』ボタンを押す
- Project: Maven
- Language: Java
- SpringBoot: 3.1.0
- Group: com.springdatajpa
- Artifact: spring-data-jpa-course
- Name : spring-data-jpa-course
- Description: Spring Data JPA with Spring Boot
- Package name: com.springdatajpa.springboot
Dependencies
- Spring Data JPA
- MySQL Driver
2. MySQLに接続する
① SpringBootを接続するため、MySQLのDatabaseのプロパティを設定する
create database ecommerce;
② application.propertiesを編集する
src/resources/application.propertiesという設定ファイルが存在し、
application.propertiesのファイル名をapplication.ymlに変更する。
②WEBコンテナ(server)の設定する
server:
port: 8080
servlet:
context-path: /chat-backend
③DB接続の設定する
//WEBコンテナ(server)の設定する
server:
port: 8080
servlet:
context-path: /chat-backend
//DB接続の設定する
spring:
datasource:
driver-class-name: org.h2.Driver
url: jdbc:h2:mem:testdb;MODE=MySQL
username: sa
password:
③MyBatisの設定する
//WEBコンテナ(server)の設定する
server:
port: 8080
servlet:
context-path: /chat-backend
//DB接続の設定する
spring:
datasource:
driver-class-name: org.h2.Driver
url: jdbc:h2:mem:testdb;MODE=MySQL
username: sa
password:
//MyBatisの設定する
mybatis:
mapper-locations: classpath*:mybatis/*.xml
configuration:
map-underscore-to-camel-case: true
④gradleでビルドする
./gradlew build
3.Hello worldを動かす
①Controllerのディレクトリを作る
src/main/java/[プロジェクト名]の下に、app/controllerディレクトリを作り、
controllerディレクトリの下にHelloController.javaというファイルを作成する。
②HelloControllerがエンドポイントを持つクラスであることを示すためにクラスに対して@RestControllerアノテーションを付与する。
package slack_chat.app.controller;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
}
③エンドポイントを追加する
package slack_chat.app.controller;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@RequestMapping(path = "/hello", method = RequestMethod.GET)
public String hello() {
return "Hello, world!";
}
}
※ @RestControllerが付与されたクラスの中から@RequestMappingが付与されたpublicメソッドがエンドポイントとして扱われる。@RequestMappingではURLのパスとHTTPメソッドを指定する。
④リファクタリングする
package slack_chat.app.controller;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@GetMapping("/hello")
public String hello() {
return "Hello, world!";
}
}
4.テスト用に Hello API を拡張する
①Hello クラスを作成する
domain/hello/modelディレクトリを作り、その下にHello.javaを作成します。
package slack_chat.domain.hello.model;
@Data
@AllArgsConstructor
public class Hello {
private String message;
}
②Controller を修正する
package slack_chat.app.controller;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@GetMapping("/hello")
// ↓引数を追加
public Hello hello(@RequestParam("name") Optional<String> name) {
// ↓引数未指定時は「world!」とする。
String resName = name.orElse("world!");
// ↓引数の値または「world!」を
return new Hello("Hello, " + resName);
}
}
5.API リクエスト送信とレスポンス検証する
①テストクラスを作成する
src/test/java/com/skach_chatに、chat/chatbackendにapiフォルダとHelloApiTest.javaを作成する。
②テストクラスにアノテーションとMockMvc クラスのインスタンス変数追加する
package slack_chat.chat.chatbackend.api;
@SpringBootTest
@AutoConfigureMockMvc
public class HelloApiTest {
@Autowired
private MockMvc mockMvc;
}
③テストメソッド作成する
参考サイト
Spring Data JPA Tutorial | Crash Course [New] [2023]
Spring Data JPAを使用したDBアクセス