Connessione a MongoDB in Micronaut con Kotlin
In questo articolo vediamo come connetterci a MongoDB in Micronaut e Kotlin.
Inseriremo un pario di oggetti direttamente nel codice, vi lascio come esercizio quello di creare una rotta apposita.
Queste tutte le mie dipendenze:
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-mongodb")
implementation("io.micronaut.mongodb:micronaut-mongo-sync")
ksp("io.micronaut.data:micronaut-data-document-processor")
}
Questo l'application.properties:
micronaut.application.name=test_micronaut_kotlin
# Database configuration
mongodb.uri=mongodb://localhost:27017/test
La classe entity:
package com.test
import io.micronaut.data.annotation.*
import io.micronaut.serde.annotation.Serdeable
import org.bson.types.ObjectId
@Serdeable
@MappedEntity("utenti")
data class Utente(
@field:Id
@GeneratedValue
val id: ObjectId? = null,
val email: String
)
Il repository:
package com.test
import io.micronaut.data.mongodb.annotation.MongoRepository
import io.micronaut.data.repository.CrudRepository
import org.bson.types.ObjectId
@MongoRepository
interface UtentiRepository : CrudRepository<Utente, ObjectId>
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?>> {
if (utentiRepository.count() == 0L) {
utentiRepository.save(Utente(email = "mario@example.com"))
utentiRepository.save(Utente(email = "anna@example.com"))
}
return utentiRepository.findAll().map { u ->
mapOf(
"id" to u.id?.toHexString(),
"email" to u.email
)
}
}
}
Per completezza mi lascio anche il main:
package com.test
import io.micronaut.runtime.Micronaut.run
fun main(args: Array<String>) {
run(*args)
}
Enjoy!
kotlin gradle micronaut mongodb
Commentami!