ORM für Kotlin: Vergleich und Beispiele
Kotlin ist eine moderne Sprache, die aktiv für die Entwicklung von Backend-Anwendungen, Android-Apps und sogar plattformübergreifenden Projekten eingesetzt wird. Für die Arbeit mit Datenbanken wählen Entwickler oft ORM (Object-Relational Mapping), um das Schreiben von rohen SQL-Abfragen zu vermeiden und die Entwicklung zu beschleunigen. In diesem Artikel betrachten wir drei beliebte ORM-Werkzeuge für Kotlin: Exposed, Ktor (in Verbindung mit Exposed) und Ktorm. Wir vergleichen ihre Syntax, Leistung und Benutzerfreundlichkeit anhand praktischer Beispiele.
1. Exposed — offizielles ORM von JetBrains
Exposed ist eine ORM-Bibliothek, die von JetBrains speziell für Kotlin entwickelt wurde. Sie unterstützt zwei Ansätze: DSL (Domain Specific Language) und DAO (Data Access Objects). Exposed lässt sich ideal in das Ktor-Framework integrieren, kann aber auch eigenständig verwendet werden.
Hauptmerkmale:
- Leichte und intuitive DSL-Syntax.
- Unterstützung für Transaktionen, Migrationen und Verbindungen.
- Arbeit mit PostgreSQL, MySQL, H2, SQLite und anderen Datenbanken.
- Aktive Community und offizielle Dokumentation.
Codebeispiel (DSL-Ansatz):
import org.jetbrains.exposed.sql.*import org.jetbrains.exposed.sql.transactions.transaction
// Tabellendefinitionobject Users : Table() { val id = integer("id").autoIncrement() val name = varchar("name", 50) val age = integer("age")
override val primaryKey = PrimaryKey(id)}
// Beispielabfragefun main() { Database.connect("jdbc:h2:mem:test", driver = "org.h2.Driver")
transaction { SchemaUtils.create(Users)
// Einfügen Users.insert { it[name] = "Alice" it[age] = 30 }
// Abfrage val result = Users.selectAll().where { Users.age greater 25 } result.forEach { println("${it[Users.name]}: ${it[Users.age]}") } }}2. Ktor + Exposed — Kombination für Webanwendungen
Ktor ist ein asynchrones Web-Framework für Kotlin. Obwohl Ktor selbst kein integriertes ORM bietet, arbeitet es hervorragend mit Exposed zusammen. Diese Kombination ermöglicht die Erstellung von REST-APIs mit minimalem Codeaufwand.
Beispiel für die Integration von Ktor mit Exposed:
import io.ktor.server.application.*import io.ktor.server.routing.*import io.ktor.server.response.*import org.jetbrains.exposed.sql.*import org.jetbrains.exposed.sql.transactions.transaction
fun Application.module() { Database.connect("jdbc:h2:mem:test", driver = "org.h2.Driver")
routing { get("/users") { val users = transaction { Users.selectAll().map { mapOf("name" to it[Users.name], "age" to it[Users.age]) } } call.respond(users) } }}Dieser Ansatz eignet sich für Microservices und kleinere Projekte, bei denen Einfachheit und Entwicklungsgeschwindigkeit wichtig sind.
3. Ktorm — leichtes und leistungsstarkes ORM
Ktorm ist ein weiteres beliebtes ORM für Kotlin, das auf Leistung und Minimalismus ausgelegt ist. Es nutzt funktionale Programmierung und unterstützt sowohl DSL als auch SQL-ähnliche Syntax.
Hauptmerkmale:
- Hohe Leistung durch das Fehlen von Reflection.
- Unterstützung für Erweiterungen (z. B. für JSON-Felder).
- Einfache Konfiguration und minimale Abhängigkeiten.
- Arbeit mit den meisten gängigen DBMS.
Codebeispiel Ktorm:
import me.liuwj.ktorm.database.Databaseimport me.liuwj.ktorm.dsl.*import me.liuwj.ktorm.entity.*
// Entitätsdefinitioninterface User : Entity { compan Auch in der Bibliothek
Internationalisierung (i18n) in JavaScript (Node.js): Die Bibliothek i18next
Standard-Java-Bibliothek: vollständiger Überblick und Codebeispiele
Logging in Java: Überblick über die besten Bibliotheken und Lösungen
SwiftyJSON für Swift: Komplettes Tutorial mit Beispielen
HTML-Parsing in Go (Golang): Bibliotheken und Codebeispiele