简介

什么是Kronos

Kronos 是为 Kotlin 设计的现代 ORM 框架。它通过编译插件提供类型安全的 SQL DSL,并支持多种数据库。

我们支持Code First和Database First两种模式,提供了数据库表结构的自动创建、自动同步,以及对表结构、索引和代码生成的支持。

Kronos 会分析 Kotlin 表达式,并让常见数据库操作保持接近 Kotlin 语法。普通 CRUD 流程可以使用 ==、>、<、in、字段引用、投影 DSL 和表操作,不需要手写字符串 SQL。

推荐阅读路径

新读者先从 📚安装 开始,再按 📚第一条查询 完成最小模型、建表、insert 和 select 流程。之后阅读 📚KPojo 理解实体映射,阅读 📚Select 理解查询,阅读 📚Insert 理解写入,最后用 📚连接数据库 配置生产数据源。

graph LR
    A[Kronos] --> B[Kronos-core]
    B --> I[ORM for KPojo]
    I --> J[Query、Insert、Update、Delete,etc.]
    A --> C[Kronos-compiler-plugin]
    C --> L[Kronos-compiler-kotlin-plugin]
    C --> D[Kronos-maven-plugin]
    C --> E[Kronos-gradle-plugin]
    A --> F[Kronos-data-source-wrapper]
    F --> G[DataSource]
    G --> H[MySQL, PostgreSQL, SQLite, H2, SQL Server, Oracle, DM8]
    A --> K[Kronos-logging, Kronos-codegen and Other Plugins]

为什么使用Kronos

示例

以下是一个简单的示例。

import com.kotlinorm.Kronos
import com.kotlinorm.wrappers.KronosJdbcWrapper
import org.apache.commons.dbcp2.BasicDataSource

val wrapper = KronosJdbcWrapper(
    BasicDataSource().apply {
        driverClassName = "com.mysql.cj.jdbc.Driver"
        url = "jdbc:mysql://localhost:3306/kronos?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC"
        username = "user"
        password = "******"
    }
)

Kronos.dataSource = { wrapper }

// 创建一个User对象
val user: User = User(
    id = 1,
    name = "Kronos",
    age = 18
)

// 如果表不存在则创建表,否则同步列和索引
wrapper.table.syncTable(user)

// 插入数据
user.insert().execute()

// 根据id更新name字段
user.update().set { it.name = "Kronos ORM" }.by { it.id }.execute()
// 或
user.update { it.name }.by { it.id }.execute()

// 根据对象值查询记录
val selectedUser: User = user.select().by { it.id }.first()

// 根据id查询name字段
val selectedName: String = user.select { it.name }.where { it.id == 1 }.first<String>()

// 删除id为1的数据
User().delete().where { it.id == 1 }.execute()
// 或
User(id = 1).delete().by { it.id }.execute()
打开交互示例