Travail avec les bases de données en Kotlin : PostgreSQL et MongoDB pour débutants

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

Introduction au travail avec les bases de données en Kotlin

\n\n

Kotlin est un langage moderne à typage statique fonctionnant sur la JVM, qui gagne rapidement en popularité grâce à sa concision et sa sécurité. L'une des compétences clés pour tout développeur est la capacité à interagir avec les bases de données. Dans cet article, nous verrons comment se connecter et effectuer les opérations de base (CRUD) avec deux des types de BDD les plus populaires : PostgreSQL (relationnelle) et MongoDB (orientée documents).

\n\n

Nous utiliserons des bibliothèques modernes, maximalement adaptées au Kotlin idiomatique :

\n
    \n
  • Exposed — framework ORM de JetBrains pour les bases de données SQL (PostgreSQL, MySQL, etc.).
  • \n
  • KMongo — client ODM réactif pour MongoDB, construit sur les coroutines.
  • \n
\n\n

Cet article est destiné aux débutants : nous aborderons la configuration du projet, la connexion à la BDD et des exemples simples d'insertion, lecture, mise à jour et suppression de données.

\n\n

1. Configuration du projet et ajout des dépendances

\n\n

Pour commencer, créez un nouveau projet Kotlin (par exemple, via IntelliJ IDEA avec Gradle ou Maven). Ajoutez les dépendances nécessaires dans le fichier build.gradle.kts.

\n\n

Dépendances Gradle pour PostgreSQL (Exposed)

\n
dependencies {\n    // Exposed\n    implementation("org.jetbrains.exposed:exposed-core:0.44.1")\n    implementation("org.jetbrains.exposed:exposed-dao:0.44.1")\n    implementation("org.jetbrains.exposed:exposed-jdbc:0.44.1")\n\n    // Pilote PostgreSQL\n    implementation("org.postgresql:postgresql:42.7.1")\n\n    // Pool de connexions (HikariCP)\n    implementation("com.zaxxer:HikariCP:5.1.0")\n}
\n\n

Dépendances Gradle pour MongoDB (KMongo)

\n
dependencies {\n    // KMongo (avec coroutines)\n    implementation("org.litote.kmongo:kmongo-coroutine:4.11.0")\n\n    // Client Ktor (si nécessaire pour le pilote réactif)\n    implementation("org.litote.kmongo:kmongo-async:4.11.0")\n}
\n\n

Après la synchronisation du projet, vous pouvez commencer la connexion.

\n\n

2. Travail avec PostgreSQL via Exposed

\n\n

Exposed propose deux approches : DSL (requêtes SQL typées) et DAO (mapping objet-relationnel). Nous utiliserons DAO, plus intuitif pour les débutants.

\n\n

Connexion à la base de données

\n
import org.jetbrains.exposed.sql.Database\nimport org.jetbrains.exposed.sql.transactions.transaction\nimport com.zaxxer.hikari.HikariConfig\nimport com.zaxxer.hikari.HikariDataSource\n\nfun connectToPostgres() {\n    val config = HikariConfig().apply {\n        jdbcUrl = "jdbc:postgresql://localhost:5432/mydb"\n        driverClassName = "org.postgresql.Driver"\n        username = "user"\n        password = "password"\n        maximumPoolSize = 10\n    }\n    val dataSource = HikariDataSource(config)\n    Database.connect(dataSource)\n    println("Connexion à PostgreSQL établie !")\n}
\n\n

Définition de la table et de l'entité

\n
import org.jetbrains.exposed.dao.id.IntIdTable\nimport org.jetbrains.exposed.dao.IntEntity\nimport org.jetbrains.exposed.dao.IntEntityClass\n\n// Définition de la table\nobject UsersTable : IntIdTable("users") {\n    val name = varchar("name", 100)\n    val email = varchar("email", 255).uniqueIndex()\n    val age = integer("age").default(18)\n}\n\n// Définition de l'entité (DAO)\nclass UserEntity(id: EntityID<Int>) : IntEntity(id) {\n    companion object : IntEntityClass<UserEntity>(UsersTable)\n\n    var name by UsersTable.name\n    var email by UsersTable.email\n    var age by UsersTable.age\n}
\n\n

Opérations CRUD

\n
fun performCRUD() {\n    transaction {\n        // Création de la table (si elle n'existe pas)\n        SchemaUtils.create(UsersTable)\n\n        // INSERT\n        val newUser = UserEntity.new {\n            name = "Ivan Petrov"\n            email = "ivan@example.com"\n            age = 25\n        }\n        println("Utilisateur créé                

Blogs

Book Recommendations