Назад к вопросам
Junior
67
questionbank

Какие основные компоненты библиотеки Room для работы с базами данных в Android?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

Основные компоненты библиотеки Room:

  • @Entity: Определяет класс как таблицу в базе данных. Аннотируется над классом данных (POJO) и указывается имя таблицы, если оно отличается от имени класса. Можно определить первичный ключ и индексы.

  • @Dao: Определяет интерфейс или абстрактный класс для доступа к данным (Data Access Object). Содержит методы для выполнения операций с базой данных (вставка, обновление, удаление, запросы).

  • @Database: Определяет абстрактный класс, который расширяет RoomDatabase. В этой аннотации указываются сущности (таблицы), DAO и версия базы данных. Предоставляет синглтон экземпляр базы данных.

  • Data Access Objects (DAO): Интерфейсы или абстрактные классы, помеченные аннотацией @Dao. Содержат методы с аннотациями @Insert, @Delete, @Update, @Query для взаимодействия с данными.

  • RoomDatabase: Абстрактный класс, который генерируется Room на основе класса с аннотацией @Database. Предоставляет точку входа для получения экземпляров DAO.

  • SQL Queries: Room использует SQL для запросов к базе данных, которые определяются в @Query аннотациях методов DAO.

Пример структуры:

// Entity
@Entity(tableName = "users")
data class User(
    @PrimaryKey val uid: Int,
    @ColumnInfo(name = "first_name") val firstName: String?,
    @ColumnInfo(name = "last_name") val lastName: String?
)

// DAO
@Dao
interface UserDao {
    @Query("SELECT * FROM users")
    fun getAll(): List<User>

    @Query("SELECT * FROM users WHERE uid IN (:userIds)")
    fun loadAllByIds(userIds: IntArray): List<User>

    @Query("SELECT * FROM users WHERE first_name LIKE :first AND last_name LIKE :last LIMIT 1")
    fun findByName(first: String, last: String): User

    @Insert
    fun insertAll(vararg users: User)

    @Delete
    fun delete(user: User)
}

// Database
@Database(entities = [User::class], version = 1)
abstract class AppDatabase : RoomDatabase() {
    abstract fun userDao(): UserDao
}

Взаимодействие между компонентами: AppDatabase (реализация RoomDatabase) предоставляет доступ к экземпляру UserDao. Методы UserDao выполняют SQL-запросы к таблице users (представленной классом User).