使用Spring Boot和Kotlin进行REST应用程序开发的实操教程2
上次
下一次回来
2. 引入数据库
引入H2数据库引擎
- build.gradleのdependenciesに以下のようにJPAとH2を追加します。
plugins {
id 'org.springframework.boot' version '2.7.12'
id 'io.spring.dependency-management' version '1.0.15.RELEASE'
id 'org.jetbrains.kotlin.jvm' version '1.6.21'
id 'org.jetbrains.kotlin.plugin.spring' version '1.6.21'
id 'org.jetbrains.kotlin.plugin.jpa' version '1.6.21' // <-- 追加
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'com.fasterxml.jackson.module:jackson-module-kotlin'
implementation 'org.jetbrains.kotlin:kotlin-reflect'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa' // <-- 追加
runtimeOnly 'com.h2database:h2' // <-- 追加
developmentOnly 'org.springframework.boot:spring-boot-devtools'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
- 追加したら、gradleをリロードしてください。
将DB的配置添加到application.yml文件中。
application.properties を application.yml にリネームします。
application.properties を右クリック → Refactor → Rename → application.yml
application.yml に以下の設定を追加します。
DB_CLOSE_DELAYは、アプリケーション終了時にDBをクローズしないようにするための設定です。
DB_CLOSE_ON_EXITは、VM終了時にDBをクローズしないようにするための設定です。
sql.init.data-locationは、初期データ投入SQLファイルを指定します。
defer-datasource-initializationはDDLをエンティティクラスから自動作成するかどうかです。
spring:
datasource:
url: jdbc:h2:mem:tododb;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE
driver-class-name: org.h2.Driver
username: sa
password:
sql:
init:
encoding: UTF-8
data-locations: classpath:data.sql
enabled: true
h2:
console:
enabled: true
jpa:
defer-datasource-initialization: true
- com.example.demo に エンティティクラス Todo.kt を新規作成します。
package com.example.demo
import java.time.OffsetDateTime
import javax.persistence.*
@Entity
@Table(name = "todo")
class Todo(
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
var id: Long? = null,
@Column(name = "title")
var title: String,
@Column(name = "description")
var description: String?,
@Column(name = "is_completed")
var isCompleted: Boolean,
@Column(name = "created_at")
var createdAt: OffsetDateTime,
@Column(name = "updated_at")
var updatedAt: OffsetDateTime
)
data.sqlを resources 配下に作成します。
- 内容は何でもいいです。
INSERT INTO todo (title, description, is_completed, created_at, updated_at) VALUES
('買い物リスト', '牛乳, パン, りんご', false, CURRENT_TIMESTAMP(), CURRENT_TIMESTAMP()),
('郵便局に行く', '郵便局で小包を受け取る', false, CURRENT_TIMESTAMP(), CURRENT_TIMESTAMP()),
('家賃の支払い', '家賃を振り込む', true, CURRENT_TIMESTAMP(), CURRENT_TIMESTAMP()),
('ジムに行く', '週に2回筋トレ&カーディオ', true, CURRENT_TIMESTAMP(), CURRENT_TIMESTAMP()),
('映画を観る', '新作の映画を観に行く', false, CURRENT_TIMESTAMP(), CURRENT_TIMESTAMP());
- demoアプリケーションを起動して、 http://localhost:8080/h2-console/ を開くとH2コンソールが開く
SELECT * FROM TODO を実行すると、データが入っていることが確認できました。
创建2-3个GET方法
-
- com.example.demo にリポジトリインタフェースを作成します。
- 継承元のJpaRepositoryはfind、save、delete、existsなど一般的にDB操作に必要なメソッドを一通り持っています。
package com.example.demo
import org.springframework.data.jpa.repository.JpaRepository
import org.springframework.stereotype.Repository
@Repository
interface TodoRepository : JpaRepository<Todo, Long>
-
- com.example.demo に controllerクラスを作成します。
- 作成したTodoRepositoryをインジェクションします。
package com.example.demo
import org.springframework.web.bind.annotation.GetMapping
import org.springframework.web.bind.annotation.RestController
@RestController
class TodoController(
val todoRepository: TodoRepository
) {
@GetMapping("/todos")
fun getTodos(): List<Todo> {
return todoRepository.findAll()
}
}
- demoアプリケーションを起動して、 http://localhost:8080/todos にアクセスすると、以下のように出ればOKです。
结束