Komapper: Kotlin ORM for JDBC and R2DBC
![Maven Central](https://img.shields.io/maven-central/v/org.komapper/komapper-platform)
Komapper is an ORM library for server-side Kotlin.
For more documentation, go to our site:
Features
Highlighted
- Support for both JDBC and R2DBC
- Code generation at compile-time using Kotlin Symbol Processing API
- Immutable and composable queries
- Support for Kotlin value classes
- Easy Spring Boot integration
Experimental
- Quarkus integration
- Transaction management using context receivers
Prerequisite
- Kotlin 1.8.22 or later
- JRE 11 or later
- Gradle 6.8.3 or later
Supported Databases
Komapper is tested with the following databases:
Database | version | JDBC support | R2DBC support |
---|
H2 Database | 2.3.230 | v | v |
MariaDB | 10.6.3 | v | v |
MySQL v5.x | 5.7.44 | v | v |
MySQL v8.x | 8.0.25 | v | v |
Oracle Database XE | 18.4.0 | v | v |
PostgreSQL | 12.9 | v | v |
SQL Server | 2019 | v | (unstable) |
Supported connectivity types:
Installation
Add the following code to the Gradle build script (gradle.build.kts).
plugins {
kotlin("jvm") version "2.0.20"
id("com.google.devtools.ksp") version "2.0.20-1.0.25"
}
val komapperVersion = "3.1.0"
dependencies {
platform("org.komapper:komapper-platform:$komapperVersion").let {
implementation(it)
ksp(it)
}
implementation("org.komapper:komapper-starter-jdbc")
implementation("org.komapper:komapper-dialect-h2-jdbc")
ksp("org.komapper:komapper-processor")
}
See also Quickstart for more details:
Sample code
To get complete code, go to our example repository.
Entity class definition
@KomapperEntity
data class Address(
@KomapperId
@KomapperAutoIncrement
@KomapperColumn(name = "ADDRESS_ID")
val id: Int = 0,
val street: String,
@KomapperVersion
val version: Int = 0,
@KomapperCreatedAt
val createdAt: LocalDateTime? = null,
@KomapperUpdatedAt
val updatedAt: LocalDateTime? = null,
)
Connecting with JDBC
fun main() {
val db = JdbcDatabase("jdbc:h2:mem:example;DB_CLOSE_DELAY=-1")
val a = Meta.address
db.withTransaction {
db.runQuery {
QueryDsl.create(a)
}
val newAddress = db.runQuery {
QueryDsl.insert(a).single(Address(street = "street A"))
}
val address = db.runQuery {
QueryDsl.from(a).where { a.id eq newAddress.id }.first()
}
}
}
Connecting with R2DBC
suspend fun main() {
val db = R2dbcDatabase("r2dbc:h2:mem:///example;DB_CLOSE_DELAY=-1")
val a = Meta.address
db.withTransaction {
db.runQuery {
QueryDsl.create(a)
}
val newAddress = db.runQuery {
QueryDsl.insert(a).single(Address(street = "street A"))
}
val address = db.runQuery {
QueryDsl.from(a).where { a.id eq newAddress.id }.first()
}
}
}
Design Policy
See DESIGN_DOC for the design policy of this project.
Compatibility Matrix
Kotlin and KSP version | Komapper version | KSP2 support? | JRE min version | Gradle min version |
---|
1.8.22-1.0.11 | 1.16.1 | No | 11 | 6.8.3 |
1.9.24-1.0.20 | 1.18.1 - 2.1.0 | No | 11 | 6.8.3 |
2.0.0-1.0.25 | 1.18.1 - 3.0.x | Yes | 11 | 7.6.4 |
Compatibility testing is performed in the komapper/compatibility-test repository.
Backers
If you use Komapper in your project or enterprise and would like to support ongoing development,
please consider becoming a backer. [Become a backer]
Our top backers are shown below!
![](https://opencollective.com/komapper/backer/6/avatar.svg)