ORM für Kotlin: Exposed vs Ktor vs Ktorm — Vergleich und Beispiele

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

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

Empfehlungen