Creación de esquemas de BD
La Clase Table: El Mapeo Lógico
Vamos a comenzar a usar nuestro ORM con la definición del esquema de la tabla Usuarios con los campos siguientes (id, nombre, mail, password, fecha_nacimiento).
Tipos de Columna Comunes
Exposed facilita la definición de columnas con métodos que reflejan tipos SQL, pero con el tipado fuerte de Kotlin:
| Tipo Exposed | Tipo SQL (MySQL) | Tipo Kotlin | Notas |
|---|---|---|---|
integer(name) |
INT |
Int |
Para números enteros. |
long(name) |
BIGINT |
Long |
Para números muy grandes (IDs de mucha concurrencia). |
varchar(name, length) |
VARCHAR |
String |
Cadenas de texto de longitud limitada. |
text(name) |
TEXT |
String |
Cadenas de texto largas sin límite fijo. |
bool(name) |
BOOLEAN |
Boolean |
Valores true/false. |
double(name) |
DOUBLE |
Double |
Números con coma flotante. |
date(name) |
DATE |
java.time.LocalDate |
Requiere la importación exposed-jdbc. |
En Exposed, el fichero de mapeo se define como un object que hereda de la clase org.jetbrains.exposed.sql.Table. Cada propiedad dentro de este objeto se convierte en una columna en la tabla de MySQL.
Modularidad: Separar estas definiciones en archivos específicos (
Usuarios.kt,Productos.kt, etc.) es la mejor práctica para mantener el proyecto organizado y escalable. Además, podemos incluirlas dentro de un package, por ejemplo, schemas.
Definiendo la Tabla Usuarios
Creamos el archivo Usuarios.kt que define el mapeo de la tabla usuarios con los campos solicitados, especificando los tipos de datos de Exposed.
| Campo SQL | Tipo de Dato en Exposed | Tipo de Dato en Kotlin | Restricciones |
|---|---|---|---|
id |
integer |
Int |
Clave Primaria, Auto-Incrementable. |
nombre |
varchar(50) |
String |
No nulo. |
mail |
varchar(100) |
String |
No nulo, Único. |
password |
varchar(255) |
String |
No nulo. |
fecha_nacimiento |
date |
LocalDate |
No nulo. |
🔍 Ejecutar y Analizar
Sigue los pasos para definir y mapear nuestra tabla de Usuarios.
Y aquí tenemos el mapeo Usuarios.kt:
Integración con la Conexión
Ahora debemos asegurar que la tabla Usuarios se cree o se verifique cada vez que la aplicación se inicia. Para ello, añadimos lo siguiente en el método conectar() de nuestro objeto ConexionDB.
🔍 Ejecutar y Analizar
Asegúrate de que tu archivo ConexionDB.kt incluya la función nueva de conectar con la creación del objeto Usuarios. OJO posiblemente, tendrás que actualizar o importar librerías.
El archivo ConexionDB.kt debe ser algo así:
🎯 Práctica 2. Diseño de Esquemas
El primer paso para consolidar el conocimiento es aplicar esta técnica a tu propio proyecto.
🎯 Práctica 2. Diseño de Esquemas
- Diseña tu Propia Entidad: Basado en la temática de tu proyecto personal (ej: si es una tienda, crea la tabla
Productos, si es una biblioteca, crea la tablaLibros). - Define el Objeto
Table: Crea un nuevoobjecten tu código (ej:object Productos : Table("productos")) que herede deTable. - Añade Columnas: Define al menos cinco columnas usando tipos como
varchar,integer,boolodouble. - Actualiza el Conector: Modifica la función
conectar()enConexionDB.ktpara que useSchemaUtils.create()y cree tu nueva tabla dentro de la transacción. - Verificación: Ejecuta el proyecto y verifica en tu gestor de BD (IntelliJ, MySQL Workbench, etc.) que tu nueva tabla se haya creado correctamente.