Exposed für Kotlin: Vollständiger Leitfaden 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

Was ist Exposed und wozu wird es benötigt?

\n\n

Exposed ist eine leichte, aber leistungsstarke ORM-Bibliothek (Object-Relational Mapping) für die Programmiersprache Kotlin, entwickelt von JetBrains. Sie bietet zwei Hauptansätze für die Arbeit mit Datenbanken: DSL (Domain Specific Language) und DAO (Data Access Objects).

\n\n

Wozu wird Exposed benötigt?

\n
    \n
  • Typsicherheit: Im Gegensatz zu rohen SQL-Abfragen verwendet Exposed typisierte Kotlin-Konstrukte, wodurch Fehler bereits zur Kompilierzeit erkannt werden können.
  • \n
  • Prägnanz: Code mit Exposed ist deutlich kürzer und lesbarer als äquivalente SQL-Abfragen oder Java-Code mit JPA.
  • \n
  • Leistung: Exposed verwendet keine Reflektion und keine Proxy-Objekte (wie Hibernate), was es sehr schnell und vorhersagbar macht.
  • \n
  • Flexibilität: Sie können innerhalb eines Projekts problemlos zwischen DSL (für komplexe Abfragen) und DAO (für einfache CRUD-Operationen) wechseln.
  • \n
  • Unterstützung vieler Datenbanken: PostgreSQL, MySQL, MariaDB, SQLite, H2, Oracle, SQL Server.
  • \n
\n\n

Installation von Exposed

\n\n

Exposed wird über das Build-System Gradle oder Maven installiert. Fügen Sie die folgenden Abhängigkeiten zu Ihrer build.gradle.kts hinzu:

\n\n
dependencies {\n    // Hauptbibliothek\n    implementation("org.jetbrains.exposed:exposed-core:0.44.1")\n    // DSL für Abfragen\n    implementation("org.jetbrains.exposed:exposed-dao:0.44.1")\n    // JDBC-Treiber für Ihre Datenbank (Beispiel für PostgreSQL)\n    implementation("org.postgresql:postgresql:42.7.1")\n    // Verbindungspool HikariCP (empfohlen)\n    implementation("com.zaxxer:HikariCP:5.1.0")\n    // SQL-Logging (optional)\n    implementation("ch.qos.logback:logback-classic:1.4.14")\n}
\n\n

Für Maven (pom.xml):

\n\n
<dependency>\n    <groupId>org.jetbrains.exposed</groupId>\n    <artifactId>exposed-core</artifactId>\n    <version>0.44.1</version>\n</dependency>
\n\n

Schnellstart: Codebeispiel

\n\n

Erstellen wir eine einfache Anwendung zur Aufgabenverwaltung (ToDo):

\n\n
import org.jetbrains.exposed.sql.*\nimport org.jetbrains.exposed.sql.transactions.transaction\nimport org.jetbrains.exposed.sql.SqlExpressionBuilder.eq\nimport java.time.LocalDateTime\n\n// 1. Tabelle definieren\nobject Tasks : Table() {\n    val id = integer("id").autoIncrement()\n    val title = varchar("title", 255)\n    val description = text("description").nullable()\n    val isCompleted = bool("is_completed").default(false)\n    val createdAt = datetime("created_at").default(LocalDateTime.now())\n\n    override val primaryKey = PrimaryKey(id)\n}\n\n// 2. Data class für Komfort\ndata class Task(\n    val id: Int,\n    val title: String,\n    val description: String?,\n    val isCompleted: Boolean,\n    val createdAt: LocalDateTime\n)\n\nfun main() {\n    // 3. Verbindung zur Datenbank herstellen (H2 im Speicher als Beispiel)\n    Database.connect("jdbc:h2:mem:test;DB_CLOSE_DELAY=-1", driver = "org.h2.Driver")\n\n    transaction {\n        // 4. Tabelle erstellen\n        SchemaUtils.create(Tasks)\n\n        // 5. Daten einfügen\n        val insertId = Tasks.insert {\n            it[title] = "Exposed lernen"\n            it[description] = "Dokumentation lesen und ein Beispiel schreiben"\n        } get Tasks.id\n\n        println("Aufgabe mit ID eingefügt: $insertId")\n\n        // 6. Alle Aufgaben auswählen\n        val allTasks = Tasks.selectAll().map { row ->\n            Task(\n                id = row[Tasks.id],\n                title = row[Tasks.title],\n                description = row[Tasks.description],\n                isCompleted = row[Tasks.isCompleted],\n                createdAt = row[Tasks.createdAt]\n            )\n        }\n        println("Alle Aufgaben: $allTasks")\n\n        // 7. Aufgabe aktualisieren\n        Tasks.updat                    

Empfehlungen