ORM für Kotlin: Vergleich von Exposed, Room und Ktorm mit Beispielen

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

Bei der Entwicklung von Anwendungen in Kotlin ist die Arbeit mit Datenbanken eine der zentralen Aufgaben. Anstatt rohe SQL-Abfragen zu schreiben, verwenden Entwickler zunehmend ORM (Object-Relational Mapping) – Werkzeuge, die die Umwandlung von Daten zwischen dem Objektmodell und relationalen Tabellen automatisieren. In diesem Artikel betrachten wir drei beliebte ORMs für Kotlin: Exposed, Room und Ktorm. Wir vergleichen ihre Architektur, Leistung, Benutzerfreundlichkeit und geben praktische Codebeispiele.



1. Exposed – Leichte DSL-Bibliothek von JetBrains

Exposed ist eine Bibliothek, die von den Entwicklern von Kotlin erstellt wurde. Sie ist kein vollwertiges ORM im klassischen Sinne (wie Hibernate), sondern bietet zwei Ansätze: DSL (Domain Specific Language) zum Schreiben von Abfragen im Kotlin-Stil und DAO (Data Access Objects) für die Arbeit mit Objekten. Exposed arbeitet auf Basis von JDBC und unterstützt PostgreSQL, MySQL, H2, SQLite und andere.



Codebeispiel mit Exposed (DSL)

// Verbindung zur DatenbankDatabase.connect("jdbc:h2:mem:test", driver = "org.h2.Driver")

// Tabellendefinitionobject Users : Table("users") { val id = integer("id").autoIncrement() val name = varchar("name", 50) val age = integer("age") override val primaryKey = PrimaryKey(id)}

// Einfügen und Abfragentransaction { SchemaUtils.create(Users) Users.insert { it[name] = "Alice" it[age] = 30 } Users.selectAll().forEach { println("${it[Users.name]}: ${it[Users.age]}") }}


Vor- und Nachteile von Exposed

  • Vorteile: geringes Gewicht, vollständige Kontrolle über SQL, gute Integration mit Kotlin Coroutines, aktive Community.
  • Nachteile: keine automatische Schema-Generierung (muss manuell erstellt werden), keine integrierte Migrationsunterstützung (erfordert Flyway oder Liquibase).


2. Room – Offizielles ORM für Android von Google

Room ist eine Bibliothek, die Teil von Android Jetpack ist. Sie bietet eine Abstraktionsebene über SQLite und generiert automatisch Code für den Datenzugriff. Room verwendet Annotationen und Kompilierung zur Build-Zeit (KAPT oder KSP), was hohe Leistung und Typsicherheit gewährleistet.



Codebeispiel mit Room

// Entität@Entity(tableName = "users")data class User(    @PrimaryKey(autoGenerate = true) val id: Int = 0,    val name: String,    val age: Int)

// DAO@Daointerface UserDao { @Query("SELECT * FROM users") suspend fun getAll(): List<User>

@Insert suspend fun insert(user: User)}

// Datenbank@Database(entities = [User::class], version = 1)abstract class AppDatabase : RoomDatabase() { abstract fun userDao(): UserDao}


Vor- und Nachteile von Room

  • Vorteile: vollständige Integration mit Android, Unterstützung von Flow und LiveData, automatische Codegenerierung, integrierte Migrationen.
  • Nachteile: an die Android-Plattform gebunden (nicht geeignet für Server- oder Desktop-Anwendungen), schwerer im Vergleich zu Exposed.


3. Ktorm – Funktionelles ORM für Kotlin

Ktorm ist eine moderne ORM-Bibliothek, die einen funktionalen Stil für die Arbeit mit Datenbanken bietet. Sie verwendet keine Annotationen und Reflexion, sondern setzt auf Kotlin DSL und Erweiterungen. Ktorm unterstützt viele DBMS (MySQL, PostgreSQL, Oracle, SQLite u.a.) und kann sowohl mit JDBC als auch mit SQL-Dialekten arbeiten.



Codebeispiel mit Ktorm

// Verbindung und Tabellendefinitionval database = Database.connect("jdbc:mysql://localhost/mydb", user = "root", password = "pass")

object Users : Table<Nothing>("users") { val id = int("id").primaryKey() val name = varch

Empfehlungen