🚀 4.1 Definindo Entidades e o Banco de Dados

No Room, não precisamos escrever comandos SQL manuais para criar tabelas. Em vez disso, definimos classes Java anotadas como @Entity, e o framework se encarrega de gerar toda a estrutura do SQLite para nós.

Definindo a Entidade Viagem

Uma entidade representa uma tabela no banco de dados. No Java 17, nossa classe Viagem fica assim:

@Entity(tableName = "viagem")
public class Viagem {
    @PrimaryKey(autoGenerate = true)
    public Long id;
 
    public String destino;
    public Integer tipoViagem;
    
    // Armazenamos a data como Long via TypeConverter (veremos adiante)
    public LocalDate dataChegada;
    public LocalDate dataSaida;
    
    public Double orcamento;
    public Integer quantidadePessoas;
}

Criando a Classe do Banco de Dados

A classe do banco de dados deve ser abstrata e herdar de RoomDatabase. Ela centraliza o acesso aos DAOs:

@Database(entities = {Viagem.class, Gasto.class}, version = 1)
@TypeConverters({Converters.class}) // Conversores para LocalDate
public abstract class AppDatabase extends RoomDatabase {
    public abstract ViagemDao viagemDao();
    public abstract GastoDao gastoDao();
 
    private static volatile AppDatabase INSTANCE;
 
    public static AppDatabase getDatabase(final Context context) {
        if (INSTANCE == null) {
            synchronized (AppDatabase.class) {
                if (INSTANCE == null) {
                    INSTANCE = Room.databaseBuilder(context.getApplicationContext(),
                            AppDatabase.class, "boa_viagem_db")
                            .build();
                }
            }
        }
        return INSTANCE;
    }
}

IMPORTANT

Convenção de ID: Ao contrário do antigo _id exigido pelo CursorAdapter, o Room permite utilizar qualquer nome para a chave primária (como id), pois ele abstrai a comunicação com a interface.

TIP

O uso do padrão Singleton (variável INSTANCE) garante que tenhamos apenas uma instância do banco de dados aberta durante a execução do app, economizando recursos e evitando conflitos de escrita.


⬅️ Capítulo Anterior | Próximo Capítulo ➡️