Найти в Дзене
Мой конспект

ROOM в Android.

Room - библиотека, входящая в состав Android Jetpack. Room - это уровень абстракции поверх базы данных SQLite. Он упрощает процесс настройки и взаимодействия с базой данных, а также обеспечивает проверку инструкций SQLite во время компиляции. Уровень абстракции - это набор функций, которые скрывают базовую реализацию / сложность. Он предоставляет интерфейс к существующему набору функциональных возможностей, например SQLite в данном случае. Для работы Room нам необходимы: Шаг 1 для работы Room: необходимо добавить зависимости (Сайт android.dev рекомендует к использованию следующие) для Gradle //Room
implementation("androidx.room:room-runtime:${rootProject.extra["room_version"]}")
ksp("androidx.room:room-compiler:${rootProject.extra["room_version"]}")
implementation("androidx.room:room-ktx:${rootProject.extra["room_version"]}") Шаг 2 для работы Room: необходимо создать таблицу с которой мы будем работать. Для этого мы создаем data class и помечаем его аннотацией @Entity(). Хорошей п
Повторялка для собеса
Повторялка для собеса

Room - библиотека, входящая в состав Android Jetpack.

Room - это уровень абстракции поверх базы данных SQLite. Он упрощает процесс настройки и взаимодействия с базой данных, а также обеспечивает проверку инструкций SQLite во время компиляции.

Уровень абстракции - это набор функций, которые скрывают базовую реализацию / сложность. Он предоставляет интерфейс к существующему набору функциональных возможностей, например SQLite в данном случае.

Для работы Room нам необходимы:

  1. Room entities - таблицы в БД;
  2. DAO - инструмент, содержащий запросы на SQL для работы с БД;
  3. Database class - это класс базы данных, который предоставляет вашему приложению экземпляры DAO, связанные с этой базой данных.
Взаимодействие Room и БД
Взаимодействие Room и БД

Шаг 1 для работы Room: необходимо добавить зависимости (Сайт android.dev рекомендует к использованию следующие) для Gradle

//Room
implementation("androidx.room:room-runtime:${rootProject.extra["room_version"]}")
ksp("androidx.room:room-compiler:${rootProject.extra["room_version"]}")
implementation("androidx.room:room-ktx:${rootProject.extra["room_version"]}")

Шаг 2 для работы Room: необходимо создать таблицу с которой мы будем работать.

Для этого мы создаем data class и помечаем его аннотацией

@Entity().

Хорошей практикой будет добавление названия таблице, для этого нужно добавить в аннотацию аргумент tableName

@Entity(tableName = "foods")

Шаг 3 для работы Room: добавить первичный ключ, сделать это можно при помощи аннотации, которой нужно пометить одно из свойств data class

@PrimaryKey()

Очень часто в качестве первичного ключа выбирают поле id. В таком случае его необходимо приравнять 0 и добавить аннотацию @PrimaryKey(autoGenerate = true), которая гарантирует нам что каждое поле id будет уникальным

@PrimaryKey(autoGenerate = true)
val id: Int = 0,

Шаг 4 для работы Room: создаем DAO

Создаваемый вами DAO представляет собой пользовательский интерфейс, который предоставляет удобные методы для запроса / извлечения, вставки, удаления и обновления базы данных. Room создает реализацию этого класса во время компиляции.

Room библиотека предоставляет удобные аннотации, такие как @Insert, @Delete и @Update, для определения методов, которые выполняют простые вставки, удаления и обновления, не требуя от вас написания инструкции SQL.

Иначе если необходимо написать более сложные операции, можно использовать аннотацию @Query, в качестве возвращаемых типов данных рекомендуется использовать Flow<T>.

DAO - это интерфейс с аннотацией @Dao, в теле которого как раз и прописываются обращения к БД.

Так как запрос может выполняться очень долго, лучше всего запросы выполнять в отдельных потоках.

Шаг 5 для работы Room: создание room database

Room Database определяет список сущностей и список DAO (запросов).

Room Database предоставляет вашему приложению экземпляры определенных вами DAO.

В свою очередь, приложение может использовать DAO для извлечения данных из базы данных в виде экземпляров связанных объектов data entity. Приложение также может использовать определенные объекты данных для обновления строк из соответствующих таблиц или для создания новых строк для вставки.

Room Database - это абстрактный класс с аннотацией @Database. Который расширяет RoomDatabase() класс

Определяем внутри абстрактную функцию, которая возвращает экземпляр DAO.

А для создания базы данных используем паттерн синглтон. Так как нам нужна только одна база данных.