Sobes.tech
Junior

Co je knihovna Room?

sobes.tech AI

Odpověď od AI

Room je trvalá knihovna, která poskytuje abstraktní vrstvu nad SQLite pro zjednodušení přístupu k databázi na Androidu. Je součástí komponent architektury a zajišťuje přísnější kontrolu dotazů během kompilace.

Hlavní komponenty Room:

  • Entity: Třída představující tabulku v databázi. Je označena @Entity. Každé pole Entity, které má být uloženo, musí být buď veřejné pole, nebo mít veřejný getter.
    @Entity(tableName = "users")
    data class User(
        @PrimaryKey val id: Int,
        val name: String
    )
    
  • DAO (Data Access Object): Rozhraní nebo abstraktní třída obsahující metody pro interakci s databází (vkládání, aktualizace, mazání, dotazy). Je označena @Dao.
    @Dao
    interface UserDao {
        @Query("SELECT * FROM users WHERE id = :userId")
        fun getUserById(userId: Int): User?
    
        @Insert(onConflict = OnConflictStrategy.IGNORE)
        suspend fun insertUser(user: User)
    }
    
  • Database: Abstraktní třída, která dědí z RoomDatabase. Spojuje Entity a DAO, poskytuje přístupové body k DAO. Je označena @Database.
    @Database(entities = [User::class], version = 1)
    abstract class AppDatabase : RoomDatabase() {
        abstract fun userDao(): UserDao
    }
    

Výhody Room:

  • Kontrola při kompilaci: Kontroluje SQL dotazy během kompilace, což snižuje počet chyb při běhu.
  • Snadnější integrace s komponentami architektury: Snadno se používá s LiveData a Paging Library.
  • Snížení boilerplate kódu: Room generuje většinu potřebného kódu pro práci s databází.
  • Podpora pro Coroutines a Flow: Pohodlná integrace s moderními přístupy k asynchronnímu programování.

Room abstrahuje detaily práce s SQLite a nabízí bezpečnější a pohodlnější způsob interakce s lokální databází.