Kotlinに置き換えてSpring Boot JPAでデータベース接続する方法までを試していきます。
Contents
プロジェクトの準備
Spring Initializrでプロジェクトを作成していきます。
必要な依存関係
- Spring Boot DevTools
- Spring Web
- Spring Data JPA
Lombok- H2 Database
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
plugins {
id("org.springframework.boot") version "2.6.1"
id("io.spring.dependency-management") version "1.0.11.RELEASE"
war
kotlin("jvm") version "1.6.0"
kotlin("plugin.spring") version "1.6.0"
kotlin("plugin.jpa") version "1.6.0"
}
group = "com.example"
version = "0.0.1-SNAPSHOT"
java.sourceCompatibility = JavaVersion.VERSION_11
configurations {
compileOnly {
extendsFrom(configurations.annotationProcessor.get())
}
}
repositories {
mavenCentral()
}
dependencies {
implementation("org.springframework.boot:spring-boot-starter-data-jpa")
implementation("org.springframework.boot:spring-boot-starter-web")
implementation("com.fasterxml.jackson.module:jackson-module-kotlin")
implementation("org.jetbrains.kotlin:kotlin-reflect")
implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
developmentOnly("org.springframework.boot:spring-boot-devtools")
runtimeOnly("com.h2database:h2")
providedRuntime("org.springframework.boot:spring-boot-starter-tomcat")
testImplementation("org.springframework.boot:spring-boot-starter-test")
}
tasks.withType<KotlinCompile> {
kotlinOptions {
freeCompilerArgs = listOf("-Xjsr305=strict")
jvmTarget = "11"
}
}
tasks.withType<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 com.example.demo.repository.entity.DemoTbl
import com.example.demo.service.DemoService
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.web.bind.annotation.RequestMapping
import org.springframework.web.bind.annotation.RequestMethod
import org.springframework.web.bind.annotation.RestController
@RestController
class DemoController
@Autowired
constructor(private val service: DemoService) {
@RequestMapping(path = ["/"], method = [RequestMethod.GET])
fun search(): List<DemoTbl> {
return service.demoTblSearch()
}
}
package com.example.demo.service
import com.example.demo.repository.DemoTblRepository
import com.example.demo.repository.entity.DemoTbl
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.stereotype.Service
import org.springframework.transaction.annotation.Transactional
@Service
@Transactional
class DemoService
@Autowired
constructor(private val repository: DemoTblRepository) {
fun demoTblSearch(): List<DemoTbl> {
return repository.findAll()
}
}
package com.example.demo.repository;
import com.example.demo.repository.entity.DemoTbl
import org.springframework.data.jpa.repository.JpaRepository
import org.springframework.stereotype.Repository
@Repository
interface DemoTblRepository : JpaRepository<DemoTbl, Int> {
}
package com.example.demo.repository.entity
import javax.persistence.*
@Entity
@Table(name = "demo_tbl")
data class DemoTbl(
@Id @GeneratedValue(strategy = GenerationType.IDENTITY) var id: Int? = 0,
@Column(name = "demo_name")var name: String)
JPAでデータベース接続を試す
ブラウザから「http://localhost:8080/」を実行すると、DBの内容が取得できた。
[{"id":1,"demoName":"demo01"},{"id":2,"demoName":"demo02"},{"id":3,"demoName":"demo03"}]
あとがき
今回はJPAで単純にテーブル1つを取ってくる方法を確認できた。
アプリケーション実行時にdata.sqlの内容がなぜか反映されなかったため、同じことが起きた人は、アプリケーション立ち上げ後、H2コンソールからINSERT文を実行してください。
コメントを残す