Spring Boot JPAでデータベース接続する方法までを試していきます。
Contents
プロジェクトの準備
Spring Initializrでプロジェクトを作成していきます。
必要な依存関係
- Spring Boot DevTools
- Spring Web
- Spring Data JPA
- Lombok
- H2 Database
plugins {
id 'org.springframework.boot' version '2.6.1'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
id 'java'
id 'war'
}
group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-web'
compileOnly 'org.projectlombok:lombok'
developmentOnly 'org.springframework.boot:spring-boot-devtools'
runtimeOnly 'com.h2database:h2'
annotationProcessor 'org.projectlombok:lombok'
providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
test {
useJUnitPlatform()
}
データベースの用意と設定
ここではH2データベースを用いて進めていきます。
application.propertiesの設定
H2データベースをインメモリで設定しています。
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.username=sa
spring.datasource.password=
spring.datasource.sql-script-encoding=UTF-8
テストデータの用意(src/main/resources配下に配置)
とりあえずファイルだけ配置すると、アプリケーション実行時に反映してくれます。
DROP TABLE IF EXISTS DEMO_TBL;
CREATE TABLE DEMO_TBL (
ID IDENTITY NOT NULL PRIMARY KEY,
DEMO_NAME VARCHAR(100) NOT NULL
);
INSERT INTO DEMO_TBL(DEMO_NAME) VALUES ('demo01');
INSERT INTO DEMO_TBL(DEMO_NAME) VALUES ('demo02');
INSERT INTO DEMO_TBL(DEMO_NAME) VALUES ('demo03');
ソースコード
package com.example.demo.controller;
import java.util.List;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import com.example.demo.repository.entity.DemoTbl;
import com.example.demo.service.DemoService;
import lombok.RequiredArgsConstructor;
@RestController
@RequiredArgsConstructor
public class DemoController {
private final DemoService service;
@RequestMapping(path = "/", method = RequestMethod.GET)
public List<DemoTbl> search() {
return service.demoTblSearch();
}
}
package com.example.demo.service;
import java.util.List;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.example.demo.repository.DemoTblRepository;
import com.example.demo.repository.entity.DemoTbl;
import lombok.RequiredArgsConstructor;
@Service
@Transactional
@RequiredArgsConstructor
public class DemoService {
private final DemoTblRepository repository;
public List<DemoTbl> demoTblSearch() {
return repository.findAll();
}
}
package com.example.demo.repository;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import com.example.demo.repository.entity.DemoTbl;
@Repository
public interface DemoTblRepository extends JpaRepository<DemoTbl, Long> {
}
package com.example.demo.repository.entity;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import lombok.Data;
@Entity
@Data
@Table(name = "demo_tbl")
public class DemoTbl {
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Column(name = "demo_name")
private String demoName;
}
JPAでデータベース接続を試す
ブラウザから「http://localhost:8080/」を実行すると、DBの内容が取得できた。
[{"id":1,"demoName":"demo01"},{"id":2,"demoName":"demo02"},{"id":3,"demoName":"demo03"}]
あとがき
今回はJPAで単純にテーブル1つを取ってくる方法を確認できた。
アプリケーション実行時にdata.sqlの内容がなぜか反映されなかったため、同じことが起きた人は、アプリケーション立ち上げ後、H2コンソールからINSERT文を実行してください。
コメントを残す