Makrosites

Suas ideias em realidade digital!

Room Database no Android: guia completo com Entity, DAO e Database

Room Database no Android: guia completo com Entity, DAO e Database

O que é Room Database?

Room é a biblioteca oficial do Android para persistência local baseada em SQLite. Ela fornece:


1️⃣ Dependências

implementation "androidx.room:room-runtime:2.6.1"
kapt "androidx.room:room-compiler:2.6.1"
implementation "androidx.room:room-ktx:2.6.1"
Se usar Kotlin:
plugins {
    id 'kotlin-kapt'
}

2️⃣ Criando a Entity

@Entity(tableName = "users")
data class UserEntity(
    @PrimaryKey(autoGenerate = true)
    val id: Int = 0,
    val name: String,
    val email: String
)

3️⃣ Criando o DAO

@Dao
interface UserDao {

    @Insert(onConflict = OnConflictStrategy.REPLACE)
    suspend fun insert(user: UserEntity)

    @Query("SELECT * FROM users")
    fun getAll(): Flow<List<UserEntity>>

    @Delete
    suspend fun delete(user: UserEntity)
}

4️⃣ Criando o Database

@Database(entities = [UserEntity::class], version = 1)
abstract class AppDatabase : RoomDatabase() {

    abstract fun userDao(): UserDao

    companion object {

        @Volatile
        private var INSTANCE: AppDatabase? = null

        fun getDatabase(context: Context): AppDatabase {
            return INSTANCE ?: synchronized(this) {
                val instance = Room.databaseBuilder(
                    context.applicationContext,
                    AppDatabase::class.java,
                    "app_database"
                ).build()
                INSTANCE = instance
                instance
            }
        }
    }
}

5️⃣ Criando o Repository

class UserRepository(private val dao: UserDao) {

    val users: Flow<List<UserEntity>> = dao.getAll()

    suspend fun insert(user: UserEntity) {
        dao.insert(user)
    }

    suspend fun delete(user: UserEntity) {
        dao.delete(user)
    }
}

6️⃣ Integrando com ViewModel

class UserViewModel(
    private val repository: UserRepository
) : ViewModel() {

    val users = repository.users.asLiveData()

    fun insert(user: UserEntity) {
        viewModelScope.launch {
            repository.insert(user)
        }
    }
}

Boas práticas profissionais


Room + Clean Architecture

Room fica na camada Data da Clean Architecture.

Veja também: