Introdução ao Room

Tempo de leitura: 2 minutes

Introdução ao Room

Neste artigo, veremos uma introdução ao Room, uma biblioteca Android que fornece uma camada de abstração sobre o SQLite, para acesso a bancos de dados.

Isso simplifica todas as criações do esquema do banco de dados, os relacionamentos entre eles e suas operações SQL

Por esse motivo, aumentará nossa produtividade em comparação com o uso do pacote nativo android.database.sqlite.

A seguir, é apresentado um conjunto de tutoriais para aprender a usar a biblioteca.

 

Componentes de arquitetura

Room é o componente de arquitetura responsável pela persistência local na camada de dados de nossos aplicativos Android.

A seguir, é apresentado um diagrama genérico, onde vemos como ele se relaciona com os componentes ViewModel e LiveData.

Arquitetura básica com Room
Arquitetura básica com Room

Onde o Repositório é uma classe e encarregada de encapsular a lógica necessária para acessar fontes de dados como o Room.

Isso não faz parte dos componentes da arquitetura do Android, mas é um padrão que o Google recomenda usar.

Dessa forma, os dados fluem dos controladores de interface do usuário para o SQLite e operam o conjunto de dados.

E é aí que trabalharemos nessa série de tutoriais.

Componentes do Room

No diagrama acima, vimos vários objetos associados ao Room. Vamos ver do que se trata.

RoomDatabase

É o principal ponto de entrada para comunicar o restante do seu aplicativo com o esquema de dados relacionais.

Esta classee oculta a implementação de SQLiteOpenHelper para facilitarnos el acceso a la base de datos.

Quando estendermos essa classee, veremos algo assim:

@Database(entities = {Product.classe}, version = 1)
public abstract classee ProductsDatabase extends RoomDatabase {
    public abstract ProductDao productDao();
}

Objeto de acesso a dados (DAO)

Um DAO representa um mapeamento de operações SQL para métodos.

O que significa que criaremos, leremos, atualizaremos e excluiremos registros deles.

As operações normalmente serão assim:

Dao
public interface ProductDao {
    @Query("SELECT * FROM product")
    List<Product> getAll();

   
    @Insert
    void insert(Product product);

    @Delete
    void delete(Product product);
}

 

Entity

A classe anotada que descreve uma tabela de banco de dados em Room.

Ou seja, um mapeamento do comando CREATE de uma tabela no SQLite.

Exemplo:

@Entity
public classe Product {
    @PrimaryKey
    public String id;

    @ColumnInfo(name = "product_name")
    public String name;

    @ColumnInfo(name = "product_price")
    public float price;
}

 

Implementação do Room

Para usar esta biblioteca, seguiremos os seguintes passos:

  • Adicionar dependência de sala ao Gradle
  • Criar uma entidade para cada modelo
  • Criar DAO
  • Subclass RoomDatabase
  • Criar repositório
  • Camada de dados de teste
  • Migrações de teste
  • Veremos como aplicar cada um nesta série de tutoriais, onde criaremos um App em listas de compras como exemplo.

Além disso, abordaremos recursos como:

  • CRUDs
  • Relações (um para um, 1 para muitos, muitos para muitos)
  • Pesquisas
  • Visualizações
  • etc.