Kotlin

KotlinでDBからJson形式をdata classにマッピングする方法

2022/07/17

前提

仕事先の環境が, DB接続はjdbiを利用し, Json mappingはJacksonを利用しているため,  この2つでの実装になる.

実装

1. build.gradle.kts に以下を追加

implementation("org.jdbi:jdbi3-jackson2")

2. jdbiにJacksonを利用するように設定する

private val jdbi: Jdbi by lazy {
    Jdbi.create(dataSource)
        .apply { getConfig(Jackson2Config::class.java).mapper = jacksonObjectMapper() }
}

3. data classにマッピングする

val sql = """
  SELECT
    json_agg(json_build_object(
      'hoge', hoge,
      'fuga', fuga
    )) as hogefugas
  FROM hoge_fuga
"""

handle.createQuery(sql)
  .mapTo(Row)

data class Row(
  @Json
  hogefugas: List<HogeFuga>,
)

data class HogeFuga(
  val hoge: String,
  val fuga: String,
)

Twitterフォロー待ってます!