Para aquellos que no sepan qué es Android Jetpack entonces
Android Jetpack es una colección de componentes de software Android para facilitarte el desarrollo de grandes aplicaciones Android.
Te ayudarán a
- Seguir las mejores prácticas
- Liberarte de escribir código boilerplate.
- Simplificar tareas complejas, para que puedas centrarte en el código que te importa.
Aquí tienes el vídeo del Canal de Desarrolladores de Android:
Ahora hablemos de Room
Room es una librería de persistencia, parte de Android Jetpack.
Aquí está el vídeo del canal de desarrolladores de Android:
Room proporciona una capa de abstracción sobre SQLite para permitir un acceso fluido a la base de datos mientras se aprovecha toda la potencia de SQLite.
Room se considera ahora como un mejor enfoque para la persistencia de datos que SQLiteDatabase. Hace que sea más fácil trabajar con objetos SQLiteDatabase en su aplicación, disminuyendo la cantidad de código repetitivo y verificando las consultas SQL en tiempo de compilación.
- Verificación en tiempo de compilación de las consultas SQL. cada @Query y @Entity se comprueba en tiempo de compilación, que preserva su aplicación de problemas de bloqueo en tiempo de ejecución y no sólo comprueba la única sintaxis, sino también las tablas que faltan.
- Código de la plantilla
- Se integra fácilmente con otros componentes de la Arquitectura (como LiveData)
Los principales problemas con el uso de SQLite son
- No hay verificación en tiempo de compilación de las consultas SQL en bruto. Por ejemplo, si escribe una consulta SQL con un nombre de columna incorrecto que no existe en la base de datos real, dará una excepción durante el tiempo de ejecución y no podrá capturar este problema durante el tiempo de compilación.
- Cuando su esquema cambia, necesita actualizar las consultas SQL afectadas manualmente. Este proceso puede llevar mucho tiempo y ser propenso a errores.
- Tienes que usar mucho código de caldera para convertir entre consultas SQL y objetos de datos Java (POJO).
Room vs SQLite
Room es una librería ORM, Object Relational Mapping. En otras palabras, Room mapeará nuestros objetos de la base de datos a objetos Java. Room proporciona una capa de abstracción sobre SQLite para permitir un acceso fluido a la base de datos aprovechando toda la potencia de SQLite.
Diferencia entre SQLite y la librería de persistencia Room:-
- En el caso de SQLite, no hay verificación en tiempo de compilación de las consultas SQLite en bruto. Pero en Room, hay validación de SQL en tiempo de compilación.
- Hay que usar mucho código boilerplate para convertir entre consultas SQL y objetos de datos Java. Pero, Room mapea nuestros objetos de base de datos a Java Object sin código boilerplate.
- Cuando su esquema cambia, necesita actualizar las consultas SQL afectadas manualmente. Room resuelve este problema.
- Room está construido para trabajar con LiveData y RxJava para la observación de datos, mientras que SQLite no.
Componentes de Room DB
Room tiene tres componentes principales de Room DB :
- Entidad
- Dao
- Base de datos
Entidad
Representa una tabla dentro de la base de datos. Room crea una tabla para cada clase que tenga @Entity
anotación, los campos de la clase se corresponden con columnas de la tabla. Por lo tanto, las clases de entidad tienden a ser pequeñas clases modelo que no contienen ninguna lógica.
Anotaciones de entidades
Antes de empezar a modelar nuestras entidades, necesitamos conocer algunas anotaciones útiles y sus atributos.
@Entidad – cada clase modelo con esta anotación tendrá una tabla de mapeo en la BD
- foreignKeys – nombres de las claves foráneas
- indices – lista de indicaciones en la tabla
- primaryKeys – nombres de las claves primarias de la entidad
- tableName
@PrimaryKey – como su nombre indica, esta anotación señala la clave primaria de la entidad. autoGenerate – si se establece en true, entonces SQLite generará un id único para la columna
@PrimaryKey(autoGenerate = true)
@ColumnInfo – permite especificar información personalizada sobre la columna
@ColumnInfo(name = "column_name")
@Ignore – el campo no será persistido por Room
@Embeded – los campos anidados pueden ser referenciados directamente en las consultas SQL.
Dao
DAOs se encargan de definir los métodos que acceden a la base de datos. En el SQLite inicial, utilizamos los objetos Cursor
. Con Room, no necesitamos todo el código relacionado con Cursor
y podemos simplemente definir nuestras consultas usando anotaciones en la clase Dao
.
Database
Contiene el soporte de la base de datos y sirve como punto de acceso principal para la conexión subyacente a los datos relacionales y persistentes de tu app.
Para crear una base de datos necesitamos definir una clase abstracta que extienda RoomDatabase
. Esta clase se anota con @Database
, enumera las entidades contenidas en la base de datos, y los DAOs que acceden a ellas.
La clase que se anota con @Database
debe satisfacer las siguientes condiciones:
- Ser una clase abstracta que extiende
RoomDatabase
.
- Incluir la lista de entidades asociadas a la base de datos dentro de la anotación.
- Contiene un método abstracto que tiene 0 argumentos y devuelve la clase que está anotada con
@Dao
.
En tiempo de ejecución, se puede adquirir una instancia de Database
llamando a Room.databaseBuilder()
oRoom.inMemoryDatabaseBuilder()
.
Paso 1: Añadir las dependencias de Gradle
- Para añadirlo a tu proyecto, abre el archivo
build.gradle
de nivel de proyecto y añade la línea resaltada como se muestra a continuación: