En este artículo veremos una introducción a Room, una librería de Android que provee una capa de abstracción sobre SQLite, para acceso a bases de datos.
Esta simplifica todas las creaciones del esquema de una base de datos, las relaciones entre ellas y sus operaciones SQL.
Por esta razón aumentará nuestra productividad en comparación al uso del paquete nativo android.database.sqlite.
La siguiente es la apertura a una serie de tutoriales para aprender a usar la librería.
Componentes De Arquitectura
Room es el componente de arquitectura encargado de la persistencia local en la capa de datos de nuestras apps Android.
El siguiente es un diagrama genérico donde vemos como se relaciona con los componentes ViewModel y LiveData.
Donde el Repositorio es una clase encargada de encapsular la lógica requerida para acceder a las fuentes de datos como Room.
Este no hace parte de los componentes de arquitectura de Android, pero es un patrón que Google recomienda usar.
De esta forma los datos fluyen desde los controladores de UI hasta llegar a SQLite y operar el conjunto de datos.
Y es justo allí donde estaremos trabajando en esta serie de tutoriales.
Componentes De Room
En el diagrama anterior vimos varios objetos asociados a Room. Veamos de qué se tratan.
RoomDatabase
Es el punto de entrada principal para comunicar el resto de tu app con el esquema relacional de datos.
Esta clase nos oculta la implementación de SQLiteOpenHelper
para facilitarnos el acceso a la base de datos.
Al extender esta clase veremos algo así:
@Database(entities = {Product.class}, version = 1)
public abstract class ProductsDatabase extends RoomDatabase {
public abstract ProductDao productDao();
}
Data Access Object (DAO)
Un DAO representa un mapeado de operaciones SQL a métodos.
Lo que quiere decir que crearemos, leeremos, actualizaremos y eliminaremos registros desde ellos.
Las operaciones se verán así normalmente:
@Dao
public interface ProductDao {
@Query("SELECT * FROM product")
List<Product> getAll();
@Insert
void insert(Product product);
@Delete
void delete(Product product);
}
Entity
La clase anotada que describe una tabla de la base de datos en Room.
Es decir, un mapeado del comando CREATE
de una tabla en SQLite.
Ejemplo:
@Entity
public class Product {
@PrimaryKey
public String id;
@ColumnInfo(name = "product_name")
public String name;
@ColumnInfo(name = "product_price")
public float price;
}
Implementar Room
Para usar esta librería seguiremos los siguientes pasos:
- Añadir dependencia de Room a Gradle
- Crear una Entity por cada modelo
- Crear DAOs
- Crear subclase de RoomDatabase
- Crear Repositorio
- Testear capa de datos
- Testear Migraciones
Veremos cómo aplicar cada uno en esta serie de tutoriales, donde crearemos como ejemplo una App sobre listas de compras.
Adicionalmente cubriremos características como:
- CRUDs
- Relaciones (uno a uno, 1 a muchos, muchos a muchos)
- Búsquedas
- Vistas
- Etc.
Terminando la introducción a Room, continuamos con: Crear Base De Datos Room