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