Introducción A Room

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.

Introducción A Room
Arquitectura básica con Room

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:

  1. Añadir dependencia de Room a Gradle
  2. Crear una Entity por cada modelo
  3. Crear DAOs
  4. Crear subclase de RoomDatabase
  5. Crear Repositorio
  6. Testear capa de datos
  7. 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

Únete Al Discord De Develou

Si tienes problemas con el código de este tutorial, preguntas, recomendaciones o solo deseas discutir sobre desarrollo Android conmigo y otros desarrolladores, únete a la comunidad de Discord de Develou y siéntete libre de participar como gustes. ¡Te espero!