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!
kotlin gradle jpa postgresql micronaut
Commentami!