Connessione a PostgreSQL in Micronaut con Kotlin e JPA

Mattepuffo's logo
Connessione a PostgreSQL in Micronaut con Kotlin e JPA

Connessione a PostgreSQL in Micronaut con Kotlin e JPA

In questo articolo vediamo come connetterci ad un db PostgreSQL in Micronaut e Kotlin.

Come gestore delle dipendenze ho usato gradle.

Queste sono tutte quelle che ho:

dependencies {
  ksp("io.micronaut:micronaut-http-validation")
  ksp("io.micronaut.serde:micronaut-serde-processor")
  implementation("io.micronaut.kotlin:micronaut-kotlin-runtime")
  implementation("io.micronaut.serde:micronaut-serde-jackson")
  implementation("org.jetbrains.kotlin:kotlin-reflect:${kotlinVersion}")
  implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8:${kotlinVersion}")
  compileOnly("io.micronaut:micronaut-http-client")
  runtimeOnly("ch.qos.logback:logback-classic")
  runtimeOnly("com.fasterxml.jackson.module:jackson-module-kotlin")
  testImplementation("io.micronaut:micronaut-http-client")
  // AGGIUNTE
  implementation("io.micronaut.data:micronaut-data-hibernate-jpa")
  implementation("io.micronaut.sql:micronaut-jdbc-hikari")
  runtimeOnly("org.postgresql:postgresql:42.7.4")
}

Questo il mio application.properties:

micronaut.application.name=test_micronaut_kotlin
# Database configuration
datasources.default.url=jdbc:postgresql://localhost:5432/DB_NAME
datasources.default.username=USERNAME
datasources.default.password=PASSWORD
datasources.default.driverClassName=org.postgresql.Driver
datasources.default.dialect=POSTGRES
datasources.default.schema-generate=NONE
# JPA configuration
jpa.default.properties.hibernate.hbm2ddl.auto=none
jpa.default.entity-scan.packages=com.test

Questa la classe entity:

package com.test

import io.micronaut.serde.annotation.Serdeable
import jakarta.persistence.Entity
import jakarta.persistence.GeneratedValue
import jakarta.persistence.GenerationType
import jakarta.persistence.Id
import jakarta.persistence.Table

@Serdeable
@Entity
@Table(name = "utenti")
data class Utente(
  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  val id: Long? = null,
  val email: String? = null
)

Il classico repository:

package com.test

import io.micronaut.data.annotation.Repository
import io.micronaut.data.jpa.repository.JpaRepository

@Repository
interface UtentiRepository : JpaRepository<Utente, Long>

Il controller:

package com.test

import io.micronaut.http.annotation.Controller
import io.micronaut.http.annotation.Get
import jakarta.inject.Inject

@Controller("/")
class RootController @Inject constructor(private val utentiRepository: UtentiRepository) {

  @Get("/")
  fun listAll(): List<Map<String, Any?>> {
    return utentiRepository.findAll().map { u ->
      mapOf(
        "id" to u.id,
        "email" to u.email
      )
    }
  }

}

Per completezza vi lascio anche il main:

package com.test

import io.micronaut.runtime.Micronaut.run

fun main(args: Array<String>) {
	run(*args)
}

Enjoy!


Condividi

Commentami!