Biblioteca de persistencia de habitaciones de Android en Kotlin

La biblioteca de persistencia de habitaciones de Android es uno de los conjuntos de bibliotecas proporcionados por Android Jetpack para ayudar a los desarrolladores a seguir las mejores prácticas mientras eliminan los códigos repetitivos y reducen la fragmentación. En las aplicaciones de Android, a menudo necesitamos almacenar datos estructurados, y mantener esos datos localmente siempre es una buena idea. De esta manera, si nuestra aplicación se bloquea o se reinicia, los datos no se perderán y se podrán recuperar más adelante. Especialmente cuando necesitamos mostrar información relevante para el usuario, que debe estar presente incluso en ausencia de una red, la persistencia de datos en la aplicación es muy útil. 

Ventajas de usar la biblioteca de persistencia de salas

La biblioteca de persistencia de salas se usa como una capa de abstracción sobre SQLite para un acceso más sólido a la base de datos. Hay varias ventajas en el uso de esta biblioteca sobre las API de SQLite y la facilidad de usar SQLite de una manera mucho más natural es la más destacada.

  • Room tiene esta característica maravillosa de verificación en tiempo de compilación de las consultas SQL que reduce las posibilidades de errores y fallas en el tiempo de ejecución.
  • La sala puede devolver datos en vivo, es decir, obtener actualizaciones instantáneas automáticas en la base de datos reflejadas después de obtener los datos.
  • Dado que Room es una biblioteca ORM (Mapeo relacional de objetos) como usuario, no es necesario convertir los datos a objetos Java/Kotlin y viceversa. As Room asigna internamente los objetos de la base de datos a los objetos de Java.
  • Room tiene la comodidad de usar anotaciones en lugar de secciones de código redundantes y repetitivas.
  • Otra característica sorprendente de Room es que aquí se puede cambiar todo el esquema de la base de datos sin cambios en el código. o empezar de cero.
  • Room tiene una excelente integración con RxJava, Kotlin Coroutines, LifecycleObserver, etc.

Ahora que tenemos una idea de las increíbles funciones que vienen con esta biblioteca, profundicemos en esto.

Componentes de la habitación

Room tiene tres componentes principales, a saber, base de datos, entidad (como tablas) y DAO (objetos de acceso a datos). Analicemos ahora cada uno de ellos uno por uno.

Base de datos

En Room, una clase abstracta anotada con @Database proporciona una capa de abstracción sobre la base de datos SQLite. Este componente de Room es el principal recurso de acceso a los datos de relación que se conservan en la aplicación. La clase que sirva para este propósito debe ser abstracta, incluida una lista de entidades asociadas con la base de datos, que contenga un método abstracto sin argumentos y el mismo tipo de retorno que la interfaz anotada con @Dao. Por ejemplo, aquí hay un fragmento de código que muestra una clase anotada llamada AppDatabase que hereda de RoomDatabase .

@Database(entities = [ToDoModel::class], version = 1)
abstract class AppDatabase : RoomDatabase() {
    abstract fun toDoDao(): ToDoDao

    // Code Lines
}

Entidad

La entidad no es más que una clase que representa columnas de una tabla de base de datos como campos de datos. Esta clase está anotada con la anotación @Entity. Todos los campos de la clase deben ser accesibles, es decir, públicos o con métodos getter/setter. También debe estar presente un constructor para crear instancias de entrada. En Kotlin, la mejor manera es usar una clase de datos que proporcione los métodos constructor, getter y setter, todos implementados intrínsecamente. Del conocimiento de SQL, se sabe que cada clase de entidad debe tener al menos una clave principal. Para esto, ese campo en particular se puede anotar con la anotación @PrimaryKey para definir una clave principal de un solo campo o, en caso de que haya más de una clave principal, se puede usar el atributo de anotación @Entity para múltiples campos. También podemos anotar campos con la anotación @Ignore si no deseamos persistir en esos campos. Aquí tenemos una clase de modelo de tareas pendientes como ejemplo con variables de título, descripción y una identificación que se genera automáticamente y actúa como la clave principal.

@Entity
data class ToDoModel (
        var title: String,
        var description: String,
        // autoGenrate -attribute to
        // automatically assign primary keys.
        @PrimaryKey(autoGenerate = true)    
        var id: Long = 0
)

Dao (objetos de acceso a datos)

Como se discutió anteriormente, Room permite a los desarrolladores usar consultas SQL de una manera mucho más robusta y natural. Aquí es cuando vemos que esto sucede. Dao es una interfaz anotada con la anotación @Dao que posee todas las consultas SQL que necesitamos tener en uso. Esto se hace usando varias anotaciones como @Insert, @Update, @Query, @Delete, etc. que reducen el texto estándar como magia, lo que hace que agregar o eliminar consultas sea muy fácil. Funciona como una API que proporciona acceso a la base de datos. Estos métodos se ejecutan en el subproceso que los llama, por lo que debemos asegurarnos de que no se llamen utilizando el subproceso principal (UI). En caso de que necesitemos trabajar con varias entidades, no necesitamos copiar varios métodos de un Dao a otro, ya que también es compatible con la herencia. Para esto, simplemente cree una clase genérica BaseDao<T> y defina los diversos @Insert, @Update, y métodos @Delete allí. A continuación se muestra una interfaz simple de Dao que tiene métodos de inserción, actualización y consulta. 

@Dao
interface ToDoDao {
    @Insert()
    suspend fun insertTask(toDoModel: ToDoModel): Long
    
    @Update(onConflict = OnConflictStrategy.REPLACE)
    suspend fun updateTask(toDoModel: ToDoModel): Int

    @Query("SELECT * FROM ToDoModel WHERE isDone == 0")
    fun getTask(): LiveData<List<ToDoModel>>


    @Query("DELETE FROM ToDoModel WHERE id=:uid")
    fun deleteTask(uid: Long)
}

Habitación Biblioteca Arquitectura

Después de revisar los componentes de la biblioteca de habitaciones, tenemos una idea de cómo funciona cada uno de ellos individualmente y cuáles son sus funciones. Ahora, en base a esto, tenemos esta ilustración que representa sus funcionalidades. Podemos ver que la instancia de Room Database adquirida por nosotros se usa para obtener acceso a Dao, que a su vez tiene todas las funciones de consulta y control sobre las entidades. Al usar estas entidades para obtener y establecer datos como se menciona a través de las consultas en Dao, los datos se conservan.   

Arquitectura de biblioteca de persistencia de sala

Implementación y configuración para usar Room Database en aplicaciones

Para ver el proyecto completo, consulte este artículo: ¿Cómo crear una aplicación Android de supermercado usando MVVM y la base de datos de habitaciones?

Publicación traducida automáticamente

Artículo escrito por taoist_lee y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *