Introdução - Room Database Android

Room é uma das bibliotecas existentes dentro do conjunto “Android JetPack” apresentado durante o Google I/O de 2018, ela auxilia os desenvolvedores criando uma abstração das camadas de banco de dados (SQLite).

Suas camadas são representadas por três componentes:

Entity: são entidades responsáveis por mapear as tabelas.

Dao (Data Access Object): são as interfaces utilizadas para acessar os dados armazenados no banco.
É possivel criar Querie’s personalizadas para os select’s, insert’s, delete’s e update’s.

Database: é a representação da classe abstrata do Banco de Dados. Esta receberá uma anotação que irá identificar as Entities, os Dao’s e seus Converters. Ele será responsável por fazer o controle do banco de dados.

Configurações de projeto:

Passo 1: Adicionar as dependências no app/build.gradle:

Passo 2: Criar uma classe MyApplication e adicionar ao Manifest:

Application é uma classe base, que é instanciada uma única vez e previamente a qualquer outra classe de sua aplicação. Ela existirá durante todo o ciclo de vida da aplicação.

Recomendações de uso: quando é necessário realizar algumas task’s antes da criação da primeira activity. Inicialização global de objetos que serão utilizados por outra Activity. Acesso a objetos imutáveis através de métodos estáticos contidos na classe.

Geralmente não é necessário a criação de uma classe que herda Application. Outra alternativa seria a utilização de Singleton’s
Para adicionar ao Manifest é necessário inserir o nome da classe. android:name=”.MyApplication” na tag <application>
Não é recomendável executar as query’s na Mainthread. Utilizei essa opção apenas para demonstração. (allowMainThreadQuerys)

Último passo: insert, update, delete e select.

Recomendações: 
1. Dagger2 para injeção de dependência;
2. Stetho para auxiliar na inspeção dos dados contidos no banco;