SQLlin 是一款基于 DSL 及 Kotlin 符号处理器(KSP)实现的 Kotlin Multiplatform ORM 框架,其底层使用 SQLite。你可以使用它在 Kotlin 代码中编写能够被 Kotlin 编译器校验的 SQL 语句。示例如下:
private val db by lazy { Database(name = "person.db", path = path, version = 1) }
fun sample() {
val tom = Person(age = 4, name = "Tom")
val jerry = Person(age = 3, name = "Jerry")
val jack = Person(age = 8, name = "Jack")
val selectStatement: SelectStatement<Person> = db {
PersonTable { table ->
table INSERT listOf(tom, jerry, jack)
table UPDATE SET { age = 5; name = "Tom" } WHERE ((age LTE 5) AND (name NEQ "Tom"))
table DELETE WHERE ((age GTE 10) OR (name NEQ "Jerry"))
table SELECT WHERE (age LTE 5) GROUP_BY age HAVING (upper(name) EQ "TOM") ORDER_BY (age to DESC) LIMIT 2 OFFSET 1
}
}
selectStatement.getResult().forEach { person ->
println(person.name)
}
}
SQLlin 能够直接向数据库插入 Kotlin 对象,也能够直接从数据库查询 Kotlin 对象。其序列化与反序列化能力基于 kotlinx.serialization。
SQLlin 支持如下平台:
- Multiplatform Common
- Android (6.0+)
- JVM (Java 11+, since
1.2.0
) - iOS (x64, arm64, simulatorArm64)
- macOS (x64, arm64)
- watchOS (x64, arm32, arm64, simulatorArm64, deviceArm64)
- tvOS (x64, arm64, simulatorArm64)
- Linux (x64, arm64)
- Windows (mingwX64)
SQLlin 的架构设计如下图所示:
SQLlin 拥有三个主要部分:sqllin-dsl、sqllin-driver 及 sqllin-processor。sqllin-driver 是一套通用的多平台 SQLite 低阶 API,大多数情况下不推荐直接使用。 sqllin-dsl 是 SQL 语句的 DSL 实现并且它基于 sqllin-driver。sqllin-processor 使用 KSP 处理注解并生成用于与 sqllin-dsl 配合使用的代码。
你可以在下列文档中学习如何使用 sqllin-dsl:
虽然不建议直接使用 sqllin-driver,但如果你想了解更多信息则可以阅读:
由于 sqllin-dsl 的反序列化基于 kotlinx.serialization,R8/ProGuard 的配置请参考 kotlinx.serialization#Android 。
本项目于 Apache License, Version 2.0 协议下开源。
查看 LICENSE 获取更多信息。