Connessione a MariaDB con Kotlin e Persism

Mattepuffo's logo
Connessione a MariaDB con Kotlin e Persism

Connessione a MariaDB con Kotlin e Persism

Persism è un ORM per Java, e quindi compatibile anche con Kotlin, molto leggero, e che è in grado di connettersi a diversi db.

Questo perchè in verità dobbiamo indicare noi a quale db collegarsi e quale driver usare.

Quindi, ad esempio, se usiamo MariaDB o MySQL, dobbiamo anche installare il driver JDBC apposito.

Oltre a questo, Persism ha vari meccanismi di auto configurazione.

Partiamo dalle dipendenze, se usate Maven:

        <dependency>
            <groupId>io.github.sproket</groupId>
            <artifactId>persism</artifactId>
            <version>2.2.0</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.30</version>
        </dependency>

Detto ciò, la mia tabella (che si chiama persone) ha i seguenti campi:

  • id
  • nome
  • cognome

Andiamo a creare una classe apposita:

data class Persone(val id: Int = 0, val nome: String? = "")

Due cose:

  • la classe si deve chiamare come la tabella; quindi se la chiamate Persona, non funziona
  • ho omesso volontariamente il campo cognome per farvi vedere cosa mi dice in console

Qui il codice Kotlin:

import net.sf.persism.Session
import java.sql.Connection
import java.sql.DriverManager
import java.sql.SQLException
import net.sf.persism.Parameters.params
import net.sf.persism.SQL.sql
import net.sf.persism.SQL.where

fun main(args: Array<String>) {
    try {
        val driver = "com.mysql.cj.jdbc.Driver"
        val dbUrl = "jdbc:mysql://localhost:3306/test"
        val user = "root"
        val pwd = "9211"

        Class.forName(driver)

        val connection: Connection = DriverManager.getConnection(dbUrl, user, pwd)
        val session = Session(connection)

        val list: List<Persone> = session.query(Persone::class.java, sql("SELECT * FROM persone"))
        for (p in list) {
            println(p.nome)
        }

        println("----------")

        val p: Persone = session.fetch(Persone::class.java, sql("SELECT * FROM persone WHERE id = ?"), params(1))
        println(p.nome)

        println("----------")

        val list2: List<Persone> = session.query(Persone::class.java, where(":nome = ?"), params("nuovo"))
        for (p2 in list2) {
            println(p2.nome)
        }
    } catch (ex: ClassNotFoundException) {
        println(ex.message)
    } catch (ex: SQLException) {
        println(ex.message)
    }
}

In console, oltre ai dati, mi dirà anche questo:

WARNING: No property found for column: cognome class: class com.mp.test.Persone

Questo perchè ha anche un meccanismo di auto discovery, e qui ci avvert che non abbiamo mappato un campo.

Enjoy!


Condividi

Commentami!