Connessione a MongoDB in Micronaut con Kotlin

Mattepuffo's logo
Connessione a MongoDB in Micronaut con Kotlin

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!


Condividi

Commentami!