Was ist Exposed und wozu wird es benötigt?
\n\nExposed 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\nWozu 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
Installation von Exposed
\n\nExposed wird über das Build-System Gradle oder Maven installiert. Fügen Sie die folgenden Abhängigkeiten zu Ihrer build.gradle.kts hinzu:
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\nFür Maven (pom.xml):
<dependency>\n <groupId>org.jetbrains.exposed</groupId>\n <artifactId>exposed-core</artifactId>\n <version>0.44.1</version>\n</dependency>\n\nSchnellstart: Codebeispiel
\n\nErstellen wir eine einfache Anwendung zur Aufgabenverwaltung (ToDo):
\n\nimport 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 Auch in der Bibliothek
Arbeit mit S3 und Cloud-Speichern in Node.js: Die Bibliothek @aws-sdk/client-s3
E-Mail-Versand in Java: Bibliotheken JavaMail und Simple Java Mail
KeychainAccess für Swift: Vollständige Anleitung mit Beispielen