Exposed pour Kotlin : guide complet avec exemples

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Qu'est-ce qu'Exposed et pourquoi en a-t-on besoin ?

\n\n

Exposed est une bibliothèque ORM (Object-Relational Mapping) légère mais puissante pour le langage de programmation Kotlin, développée par la société JetBrains. Elle propose deux approches principales pour travailler avec les bases de données : DSL (Domain Specific Language) et DAO (Data Access Objects).

\n\n

Pourquoi Exposed est-il nécessaire ?

\n
    \n
  • Sécurité des types : Contrairement aux requêtes SQL brutes, Exposed utilise des constructions typées de Kotlin, ce qui permet de détecter les erreurs dès la compilation.
  • \n
  • Concision : Le code avec Exposed est nettement plus court et plus lisible que les requêtes SQL équivalentes ou le code Java avec JPA.
  • \n
  • Performance : Exposed n'utilise ni réflexion ni objets proxy (contrairement à Hibernate), ce qui le rend très rapide et prévisible.
  • \n
  • Flexibilité : Vous pouvez facilement basculer entre DSL (pour les requêtes complexes) et DAO (pour les opérations CRUD simples) au sein d'un même projet.
  • \n
  • Support de multiples bases de données : PostgreSQL, MySQL, MariaDB, SQLite, H2, Oracle, SQL Server.
  • \n
\n\n

Installation d'Exposed

\n\n

Exposed s'installe via le système de construction Gradle ou Maven. Ajoutez les dépendances suivantes dans votre build.gradle.kts :

\n\n
dependencies {\n    // Bibliothèque principale\n    implementation("org.jetbrains.exposed:exposed-core:0.44.1")\n    // DSL pour les requêtes\n    implementation("org.jetbrains.exposed:exposed-dao:0.44.1")\n    // Pilote JDBC pour votre base de données (exemple pour PostgreSQL)\n    implementation("org.postgresql:postgresql:42.7.1")\n    // Pool de connexions HikariCP (recommandé)\n    implementation("com.zaxxer:HikariCP:5.1.0")\n    // Journalisation SQL (optionnel)\n    implementation("ch.qos.logback:logback-classic:1.4.14")\n}
\n\n

Pour 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

Démarrage rapide : exemple de code

\n\n

Créons une application simple de gestion de tâches (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. Définir la table\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 pour plus de commodité\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. Connexion à la base de données (H2 en mémoire pour l'exemple)\n    Database.connect("jdbc:h2:mem:test;DB_CLOSE_DELAY=-1", driver = "org.h2.Driver")\n\n    transaction {\n        // 4. Créer la table\n        SchemaUtils.create(Tasks)\n\n        // 5. Insérer des données\n        val insertId = Tasks.insert {\n            it[title] = "Apprendre Exposed"\n            it[description] = "Lire la documentation et écrire un exemple"\n        } get Tasks.id\n\n        println("Tâche insérée avec l'ID : $insertId")\n\n        // 6. Sélectionner toutes les tâches\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("Toutes les tâches : $allTasks")\n\n        // 7. Mettre à jour une tâche\n        Tasks.updat                    

Recommendations