Definition af tabeller med Table-DSL'en
Definér typesikre tableskemaer med kolonner, primærnøgler og fremmednøgler.
Definition af tabeller med Table-DSL'en er en gratis Kotlin Academy-lektion på CoddyKit. Dette er lektion 2 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i Kotlin Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Kotlin Academy-kurset indeholder 4 lektioner i alt.
Exposed-tabelobjekter
I Exposed repræsenteres databasetabeller som Kotlin-singleton-objects, der udvider Table (forespørgsels-DSL) eller IntIdTable/LongIdTable/UUIDTable (DAO-lag). Kolonnedefinitioner er Kotlin-egenskaber.
En grundlæggende tabeldefinition
Udvid Table, og definér kolonner ved hjælp af de indbyggede fabriksfunktioner til kolonner:
import org.jetbrains.exposed.sql.Table
object Users : Table("users") {
val id = long("id").autoIncrement()
val name = varchar("name", 100)
val email = varchar("email", 255).uniqueIndex()
val age = integer("age").nullable()
override val primaryKey = PrimaryKey(id)
}Kolonnetyper
Exposed tilbyder fabriksfunktioner til almindelige SQL-typer:
integer("col"),long("col"),short("col")varchar("col", length),text("col")bool("col"),double("col"),decimal("col", precision, scale)datetime("col"),date("col"),timestamp("col")blob("col"),uuid("col"),binary("col", length)
Nullbare kolonner
Kald .nullable() på en hvilken som helst kolonne for at tillade NULL-værdier. Kotlin-typen bliver nullbar (String? i stedet for String):
object Products : Table("products") {
val id = long("id").autoIncrement()
val name = varchar("name", 200)
val description = text("description").nullable()
override val primaryKey = PrimaryKey(id)
}Standardværdier
Brug .default(value) til en standardværdi på Kotlin-siden, som anvendes før indsættelse, eller .defaultExpression(expr) til en SQL-standardværdi på databasesiden:
object Orders : Table("orders") {
val id = long("id").autoIncrement()
val status = varchar("status", 20).default("PENDING")
val createdAt = datetime("created_at")
.defaultExpression(CurrentDateTime)
override val primaryKey = PrimaryKey(id)
}Indekser og unikke begrænsninger
Kald .index() for et almindeligt indeks eller .uniqueIndex() for et unikt indeks direkte på en kolonne. Brug funktionen index() på tabellen til sammensatte indekser:
object Articles : Table("articles") {
val id = long("id").autoIncrement()
val title = varchar("title", 300).index()
val slug = varchar("slug", 300).uniqueIndex()
override val primaryKey = PrimaryKey(id)
}Fremmednøgler
Brug .references() til at erklære en fremmednøglebegrænsning mellem kolonner. Angiv den refererede kolonne og eventuelt handlingerne onDelete og onUpdate:
object Posts : Table("posts") {
val id = long("id").autoIncrement()
val authorId = long("author_id").references(Users.id, onDelete = ReferenceOption.CASCADE)
val title = varchar("title", 300)
override val primaryKey = PrimaryKey(id)
}IdTable-varianter
Brug typede ID-tabeller i DAO-laget i stedet for en almindelig Table:
IntIdTable("name")— automatisk inkrementerende primærnøgle af typenIntmed navnetidLongIdTable("name")— automatisk inkrementerende primærnøgle af typenLongUUIDTable("name")— primærnøgle af typen UUID
object Users : LongIdTable("users") {
val name = varchar("name", 100)
val email = varchar("email", 255).uniqueIndex()
}Sammensatte primærnøgler
Definér en sammensat primærnøgle ved at sende flere kolonner til PrimaryKey():
object UserRoles : Table("user_roles") {
val userId = long("user_id").references(Users.id)
val roleId = long("role_id").references(Roles.id)
override val primaryKey = PrimaryKey(userId, roleId)
}Enum-kolonner
Gem Kotlin-enumværdier som strenge eller ordinaler ved hjælp af enumerationByName() eller enumeration():
enum class Status { ACTIVE, INACTIVE, BANNED }
object Users : LongIdTable("users") {
val name = varchar("name", 100)
val status = enumerationByName<Status>("status", 20)
}Anvendelse af skemaændringer
Kald SchemaUtils.createMissingTablesAndColumns() for at tilføje manglende tabeller og kolonner uden at slette eksisterende data — en sikker migrering under udviklingen. Brug et migreringsværktøj som Flyway eller Liquibase i produktion.
transaction {
SchemaUtils.createMissingTablesAndColumns(Users, Posts, Orders)
}Hurtigt tjek
Hvordan erklærer du en fremmednøgle fra Posts.authorId til Users.id i Exposeds Table-DSL?
Opsummering: Definition af tabeller med Table-DSL'en
Vigtigste pointer:
- Tabeller er
object-er, der udviderTable,LongIdTableosv. - Kolonner:
varchar,integer,long,bool,datetime,uuidosv. .nullable(),.default(),.uniqueIndex()og.references()ændrer kolonner- Sammensatte primærnøgler:
PrimaryKey(col1, col2) - Anvend skemaet med
SchemaUtils.create()ellercreateMissingTablesAndColumns()
Lær Kotlin med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 51
- Lektioner
- 203
Ofte stillede spørgsmål
Er lektionen “Definition af tabeller med Table-DSL'en” gratis?
Ja — alle 3 lektioner i læringssporet Kotlin Academy, inklusive “Definition af tabeller med Table-DSL'en”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Kotlin Academy-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Definition af tabeller med Table-DSL'en”?
Definér typesikre tableskemaer med kolonner, primærnøgler og fremmednøgler. Du øver dig i Kotlin Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på Kotlin Academy?
Der kræves ingen tidligere erfaring. Kotlin Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 2 af 4.
Hvor lang tid tager lektionen “Definition af tabeller med Table-DSL'en”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne Kotlin Academy-lektion?
Ja. Alle Kotlin Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- Exposed-opsætning: Databaseforbindelse og transaction-DSL
- Definition af tabeller med Table-DSL'en
- CRUD med Query-DSL'en: insert, select, update, delete
- Exposed DAO: Entity-klasser og relationer