Creación de Entidades y DAO en Base de Datos con Room en Kotlin

Clase 28 de 32Curso de Patrones de Diseño en Android

Resumen

¿Cómo crear la entidad Transfer en un proyecto de Kotlin?

Para comenzar a trabajar con entidades en tu proyecto de Kotlin, primero necesitas crear la estructura adecuada para almacenar y gestionar los datos en tu base de datos. Aquí, detallamos los pasos que debes seguir para establecer estas bases, comenzando con la creación de una entidad Transfer adecuada.

¿Cómo definir la clase de entidad Transfer?

La entidad Transfer es esencialmente un esquema de lo que será una tabla en tu base de datos. Este es el proceso para su creación:

  1. Creación del paquete y clase de entidad: En primer lugar, dentro del paquete transfers, crea un nuevo paquete denominado Data. Aquí, introduce la clase TransferEntity.

  2. Definición de variables y anotaciones: Utiliza data class para definir tu entidad simplificando la creación de clases de datos:

    @Entity(tableName = "transfer")
    data class TransferEntity(
        @PrimaryKey(autoGenerate = true) var transactionId: Int = 0,
        @ColumnInfo(name = "user_id") var userId: String,
        @ColumnInfo(name = "recipient_id") var recipientId: String,
        @ColumnInfo(name = "transaction_date") var transactionDate: String,
        @ColumnInfo(name = "transaction_amount") var transactionAmount: String
    )
    
    • Usa @Entity para declarar que esta clase es una entidad ligada a la tabla "transfer" en la base de datos.
    • Define las llaves primarias y haz que las columnas sean auto-generadas con anotaciones como @PrimaryKey y @ColumnInfo.

¿Cómo crear el DAO (Data Access Object)?

El DAO asegura que puedas acceder y manipular los datos en la base de datos eficientemente.

  1. Definición de la interfaz DAO: Crea una nueva interfaz llamada TransferDao. Aquí se definirán varias funciones para interactuar con los datos:

    @Dao
    interface TransferDao {
        @Query("SELECT * FROM transfer")
        fun getAllTransfers(): List<TransferEntity>
    
        @Query("SELECT * FROM transfer WHERE user_id = :userId")
        fun findTransfersByUserId(userId: String): List<TransferEntity>
    
        @Insert
        suspend fun insertTransfer(transfer: TransferEntity)
    
        @Delete
        suspend fun deleteTransfer(transfer: TransferEntity)
    }
    
    • @Dao indica que esta interfaz proporciona métodos para acceder a la base de datos.
    • Usa anotaciones como @Query, @Insert, y @Delete para realizar operaciones CRUD.

¿Cómo establecer la conexión con la base de datos?

Para que tu aplicación acceda a la base de datos, necesitas configurar la conexión con ella.

  1. Configuración de la clase de la base de datos:

    Crea una clase llamada ApplicationDatabase, que extienda RoomDatabase, donde se definirá cómo crear y acceder a la base de datos:

    @Database(entities = [TransferEntity::class], version = 1)
    abstract class ApplicationDatabase : RoomDatabase() {
        abstract fun transferDao(): TransferDao
    
        companion object {
            @Volatile private var instance: ApplicationDatabase? = null
    
            fun getInstance(context: Context): ApplicationDatabase {
                return instance ?: synchronized(this) {
                    instance ?: Room.databaseBuilder(
                        context.applicationContext,
                        ApplicationDatabase::class.java,
                        "transfer_database"
                    ).build().also { instance = it }
                }
            }
        }
    }
    
    • Usa el diseño Singleton para asegurar que solamente una instancia de la base de datos esté abierta a la vez.

Crear una estructura de base de datos robusta en Kotlin con Room no solo es eficiente, sino también esencial para garantizar el rendimiento y la escalabilidad de tu aplicación. A partir de las secciones anteriores, tienes las bases necesarias para continuar expandiendo y mejorando tu aplicación. ¡Sigue explorando y desarrollando!