Sobes.tech
Junior

Čo je knižnica Room?

sobes.tech AI

Odpoveď od AI

Room je trvalá knižnica, ktorá poskytuje abstraktnú vrstvu nad SQLite na zjednodušenie prístupu k databáze na Android. Je súčasťou komponentov architektúry a zabezpečuje prísnejšiu kontrolu dotazov počas kompilácie.

Hlavné komponenty Room:

  • Entity: Trieda, ktorá predstavuje tabuľku v databáze. Označená @Entity. Každé pole Entity, ktoré má byť uložené, musí byť buď verejné pole, alebo mať verejný getter.
    @Entity(tableName = "users")
    data class User(
        @PrimaryKey val id: Int,
        val name: String
    )
    
  • DAO (Data Access Object): Rozhranie alebo abstraktná trieda obsahujúca metódy na interakciu s databázou (vloženie, aktualizácia, odstránenie, dotazy). Označená @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á trieda, ktorá dedí od RoomDatabase. Spája Entity a DAO, poskytujúc body prístupu k DAO. Označená @Database.
    @Database(entities = [User::class], version = 1)
    abstract class AppDatabase : RoomDatabase() {
        abstract fun userDao(): UserDao
    }
    

Výhody Room:

  • Kontrola počas kompilácie: Kontroluje SQL dotazy počas kompilácie, čím znižuje počet chýb počas behu.
  • Jednoduchšia integrácia s komponentmi architektúry: Jednoduché na použitie s LiveData a Paging Library.
  • Zníženie boilerplate kódu: Room generuje väčšinu potrebného kódu na prácu s databázou.
  • Podpora pre Coroutines a Flow: Pohodlná integrácia s modernými prístupmi k asynchrónnemu programovaniu.

Room abstrahuje detaily práce s SQLite, ponúkajúc bezpečnejší a pohodlnejší spôsob interakcie s lokálnou databázou.