Какие основные компоненты библиотеки 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).