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!
kotlin database persism mysql mariadb maven
Commentami!