【Java】Spring Boot+JPAでデータベースに接続する方法

Spring Boot JPAでデータベース接続する方法までを試していきます。

プロジェクトの準備

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文を実行してください。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です