ORM pour Kotlin : comparaison d'Exposed, Room et Ktorm 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

ORM pour Kotlin : comparaison et exemples

Lors du développement d'applications en Kotlin, le travail avec les bases de données est l'une des tâches clés. Au lieu d'écrire des requêtes SQL brutes, les développeurs utilisent de plus en plus les ORM (Object-Relational Mapping) — des outils qui automatisent la transformation des données entre le modèle objet et les tables relationnelles. Dans cet article, nous examinerons trois ORM populaires pour Kotlin : Exposed, Room et Ktorm. Nous comparerons leur architecture, leurs performances, leur facilité d'utilisation et fournirons des exemples pratiques de code.



1. Exposed — une bibliothèque DSL légère de JetBrains

Exposed est une bibliothèque développée par les créateurs de Kotlin. Ce n'est pas un ORM complet au sens classique (comme Hibernate), mais il propose deux approches : DSL (Domain Specific Language) pour écrire des requêtes dans le style Kotlin et DAO (Data Access Objects) pour travailler avec des objets. Exposed fonctionne au-dessus de JDBC et prend en charge PostgreSQL, MySQL, H2, SQLite et autres.



Exemple de code avec Exposed (DSL)

// Connexion à la base de donnéesDatabase.connect("jdbc:h2:mem:test", driver = "org.h2.Driver")

// Définition de la tableobject Users : Table("users") { val id = integer("id").autoIncrement() val name = varchar("name", 50) val age = integer("age") override val primaryKey = PrimaryKey(id)}

// Insertion et sélectiontransaction { SchemaUtils.create(Users) Users.insert { it[name] = "Alice" it[age] = 30 } Users.selectAll().forEach { println("${it[Users.name]}: ${it[Users.age]}") }}


Avantages et inconvénients d'Exposed

  • Avantages : léger, contrôle total sur SQL, bonne intégration avec Kotlin Coroutines, communauté active.
  • Inconvénients : absence de génération automatique de schéma (à créer manuellement), pas de support intégré des migrations (nécessite Flyway ou Liquibase).


2. Room — l'ORM officiel pour Android de Google

Room est une bibliothèque faisant partie d'Android Jetpack. Elle fournit une couche d'abstraction au-dessus de SQLite et génère automatiquement le code d'accès aux données. Room utilise des annotations et la compilation à l'étape de construction (KAPT ou KSP), ce qui garantit des performances élevées et la sécurité des types.



Exemple de code avec Room

// Entité@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)}

// Base de données@Database(entities = [User::class], version = 1)abstract class AppDatabase : RoomDatabase() { abstract fun userDao(): UserDao}


Avantages et inconvénients de Room

  • Avantages : intégration complète avec Android, support de Flow et LiveData, génération automatique de code, migrations intégrées.
  • Inconvénients : lié à la plateforme Android (ne convient pas aux applications serveur ou desktop), plus lourd par rapport à Exposed.


3. Ktorm — un ORM fonctionnel pour Kotlin

Ktorm est une bibliothèque ORM moderne qui propose un style fonctionnel de travail avec les bases de données. Elle n'utilise ni annotations ni réflexion, mais repose sur le DSL Kotlin et les extensions. Ktorm prend en charge de nombreux SGBD (MySQL, PostgreSQL, Oracle, SQLite, etc.) et peut fonctionner aussi bien avec JDBC qu'avec les dialectes SQL.



Exemple de code avec Ktorm

// Connexion et définition de la tableval database = Database.connect("jdbc:mysql://localhost/mydb", user = "root", password = "pass")

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

Recommendations