Definindo tabelas com a DSL Table
Defina esquemas de tabelas tipados com colunas, chaves primárias e chaves estrangeiras.
Definindo tabelas com a DSL Table é uma aula grátis de Kotlin Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Kotlin Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Kotlin Academy inclui 4 aulas no total.
Objetos de tabela do Exposed
No Exposed, as tabelas do banco de dados são representadas como objetos singleton do Kotlin que estendem Table (DSL de consultas) ou IntIdTable/LongIdTable/UUIDTable (camada DAO). As definições de colunas são propriedades Kotlin.
Uma definição básica de tabela
Estenda Table e defina as colunas usando as funções integradas de criação de colunas:
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)
}Tipos de coluna
O Exposed fornece funções de criação para tipos SQL comuns:
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)
Colunas anuláveis
Chame .nullable() em qualquer coluna para permitir valores NULL. O tipo Kotlin se torna anulável (String? em vez de 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)
}Valores padrão
Use .default(value) para um valor padrão definido no Kotlin (aplicado antes da inserção) ou .defaultExpression(expr) para um valor padrão SQL definido no banco de dados:
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)
}Índices e restrições de unicidade
Chame .index() para um índice comum ou .uniqueIndex() para um índice exclusivo diretamente em uma coluna. Para índices compostos, use a função index() na tabela:
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)
}Chaves estrangeiras
Use .references() para declarar uma restrição de chave estrangeira entre colunas. Passe a coluna referenciada e, opcionalmente, as ações onDelete e 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)
}Variantes de IdTable
Na camada DAO, use tabelas de ID tipadas em vez de uma Table simples:
IntIdTable("name")— chave primária de incremento automático do tipoIntchamadaidLongIdTable("name")— chave primária de incremento automático do tipoLongUUIDTable("name")— chave primária UUID
object Users : LongIdTable("users") {
val name = varchar("name", 100)
val email = varchar("email", 255).uniqueIndex()
}Chaves primárias compostas
Defina uma chave primária composta passando várias colunas para 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)
}Colunas de enumeração
Armazene valores de enumeração do Kotlin como cadeias de caracteres ou ordinais usando enumerationByName() ou enumeration():
enum class Status { ACTIVE, INACTIVE, BANNED }
object Users : LongIdTable("users") {
val name = varchar("name", 100)
val status = enumerationByName<Status>("status", 20)
}Aplicando alterações ao esquema
Chame SchemaUtils.createMissingTablesAndColumns() para adicionar tabelas e colunas ausentes sem remover os dados existentes — uma migração segura para desenvolvimento. Em produção, use uma ferramenta de migração como Flyway ou Liquibase.
transaction {
SchemaUtils.createMissingTablesAndColumns(Users, Posts, Orders)
}Verificação rápida
Como declarar uma chave estrangeira de Posts.authorId para Users.id na DSL de tabelas do Exposed?
Recapitulação: definindo tabelas com a DSL de tabelas
Principais pontos:
- As tabelas são objetos
objectque estendemTable,LongIdTableetc. - Colunas:
varchar,integer,long,bool,datetime,uuidetc. .nullable(),.default(),.uniqueIndex()e.references()modificam as colunas- Chaves primárias compostas:
PrimaryKey(col1, col2) - Aplique o esquema com
SchemaUtils.create()oucreateMissingTablesAndColumns()
Perguntas Frequentes
A aula “Definindo tabelas com a DSL Table” é grátis?
Sim — o texto completo de “Definindo tabelas com a DSL Table” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Kotlin Academy, atualize para CoddyKit PRO. O curso de Kotlin Academy inclui 4 aulas no total.
O que vou aprender em “Definindo tabelas com a DSL Table”?
Defina esquemas de tabelas tipados com colunas, chaves primárias e chaves estrangeiras. Você pratica Kotlin Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Kotlin Academy?
Nenhuma experiência prévia é necessária. Kotlin Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.
Quanto tempo leva a aula “Definindo tabelas com a DSL Table”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Kotlin Academy?
Sim. Cada aula de Kotlin Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Configuração do Exposed: conexão com banco de dados e DSL de transações
- Definindo tabelas com a DSL Table
- CRUD com a DSL de consultas: insert, select, update, delete
- DAO do Exposed: classes de entidades e relacionamentos