Course Content
-
Сохраняем данные в Room + ViewModel
- Коротко об Android Architecture Components и Room
- Создание проекта и добавление необходимых зависимостей
- Создание Entity
- Создание DAO
- Знакомство с LiveData
- Создание базы данных Room
- Знакомство с патерном Repository (Репозиторий) и создание слоя для доступа к данным
- Создание ViewModel
- Создание ячейки списка для отображения UI
- Создание адаптера и добавление RecyclerView
- Добавление записи в БД используя Room
- Создание Activity
- Подключение к базе данных Room
- Итоги
Создание DAO
DAO (data access object) позволяет выполнять SQL – запросы для чтения или обновления данных. Используя DAO Room сгенерирует запросы для работы с данными, например @Insert
Таким образом вам достаточно только описать методы доступа к вашему объекту, а Room сгенерирует запросы.
DAO должен быть интерфейсом или абстрактным классом. По умолчанию, все запросы в БД должны выполняться в отдельном потоке. Room поддерживает корутины, для этого используется suspend
модификатор.
Создание DAO
Давайте создадим DAO который будет
- Возвращать все слова алфавитном порядке
- Вставлять слова
- Удалять все слова
Для этого создайте класс WordDao
как показано ниже
@Dao interface WordDao { @Query("SELECT * from word_table ORDER BY word ASC") fun getAlphabetizedWords(): List<Word> @Insert(onConflict = OnConflictStrategy.IGNORE) suspend fun insert(word: Word) @Query("DELETE FROM word_table") suspend fun deleteAll() }
Рассмотрим, что означает каждая строка:
WordDao
является интерфейсом; DAOs могут быть либо интерфейсом, либо абстрактным классом.- Аннотация
@Dao
обозначает DAO класс для Room. suspend fun insert(word: Word)
: Опсывате suspend функицю для вставки слова@Insert
аннотация относится к DAO методу вставки, где вам не нужно самостоятельно описывать SQL-запрос (К таким же методам относятся@Delete
или@Update
для обновления строк)onConflict = OnConflictStrategy.IGNORE
: Выбранная стратегия игнорирует вставку нового слова, если уже существует точно такое же слово. Более подробно о других типах стратегий можно узнать из документации.suspend fun deleteAll()
: Объявление suspend функции для удаления всех слов.- Вспомогательного метода для удаления нет (как например при вставке или обновлении) поэтому для удаления необходимо добавить аннотацию
@Query
и добавить SQL – запрос. @Query
("DELETE FROM word_table")
:@Query
аннотация используется для создания SQL – запроса, сам запрос нужно добавить в виде строки.fun getAlphabetizedWords(): List<Word>
: метод для получения списка слов@Query(
"SELECT * from word_table ORDER BY word ASC"
)
: Описание запроса для получения списка слова в алфавитном порядке.
Мы описали DAO и теперь можем использовать LiveData для получения данных и оповещения об их изменениях.
Предыдущий
Создание Entity
Следующий
Знакомство с LiveData