使用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をリロードしてください。
image.png

将DB的配置添加到application.yml文件中。

application.properties を application.yml にリネームします。

application.properties を右クリック → Refactor → Rename → application.yml

image.png
image.png

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 配下に作成します。

image.png
    内容は何でもいいです。
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コンソールが開く
image.png

SELECT * FROM TODO を実行すると、データが入っていることが確認できました。

image.png

创建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です。
image.png

结束

广告
将在 10 秒后关闭
bannerAds