在Kotlin中处理数据库:PostgreSQL和MongoDB入门指南

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

Kotlin数据库操作入门

\n\n

Kotlin是一种运行在JVM上的现代静态类型语言,凭借其简洁性和安全性迅速流行起来。任何开发者的关键技能之一就是能够与数据库进行交互。在本文中,我们将探讨如何连接并执行两种最流行数据库类型的基本操作(CRUD):关系型PostgreSQL和文档型MongoDB。

\n\n

我们将使用最适应Kotlin惯用法的现代库:

\n
    \n
  • Exposed — JetBrains为SQL数据库(PostgreSQL、MySQL等)开发的ORM框架。
  • \n
  • KMongo — 基于协程的MongoDB反应式ODM客户端。
  • \n
\n\n

本文面向初学者:我们将讲解项目配置、数据库连接以及插入、读取、更新和删除数据的简单示例。

\n\n

1. 项目配置和依赖添加

\n\n

首先,创建一个新的Kotlin项目(例如,通过IntelliJ IDEA使用Gradle或Maven)。在build.gradle.kts文件中添加必要的依赖。

\n\n

PostgreSQL(Exposed)的Gradle依赖

\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    // PostgreSQL驱动\n    implementation("org.postgresql:postgresql:42.7.1")\n\n    // 连接池(HikariCP)\n    implementation("com.zaxxer:HikariCP:5.1.0")\n}
\n\n

MongoDB(KMongo)的Gradle依赖

\n
dependencies {\n    // KMongo(带协程)\n    implementation("org.litote.kmongo:kmongo-coroutine:4.11.0")\n\n    // Ktor客户端(如果需要反应式驱动)\n    implementation("org.litote.kmongo:kmongo-async:4.11.0")\n}
\n\n

项目同步后,即可开始连接。

\n\n

2. 通过Exposed操作PostgreSQL

\n\n

Exposed提供了两种方法:DSL(类型安全的SQL查询)和DAO(对象关系映射)。我们将介绍DAO——它对初学者更直观。

\n\n

连接数据库

\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("PostgreSQL连接已建立!")\n}
\n\n

定义表和实体

\n
import org.jetbrains.exposed.dao.id.IntIdTable\nimport org.jetbrains.exposed.dao.IntEntity\nimport org.jetbrains.exposed.dao.IntEntityClass\n\n// 定义表\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// 定义实体(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

CRUD操作

\n
fun performCRUD() {\n    transaction {\n        // 创建表(如果不存在)\n        SchemaUtils.create(UsersTable)\n\n        // INSERT\n        val newUser = UserEntity.new {\n            name = "伊万·彼得罗夫"\n            email = "ivan@example.com"\n            age = 25\n        }\n        println("用户已创建                

博客

书籍推荐