Créer la DAO¶
3.1 Qu'est-ce qu'une DAO ?¶
Un DAO (data access object) valide votre SQL à la compilation et l'associe à une méthode. Dans votre DAO Room, vous utilisez des annotations pratiques, comme @Insert, pour représenter les opérations de base de données les plus courantes ! Room utilise le DAO pour créer une API propre pour votre code.
Le DAO doit être une interface ou une classe abstraite. Par défaut, toutes les requêtes doivent être exécutées sur un thread distinct.
3.2 Créer une interface DAO¶
Écrivons un DAO qui fournit des requêtes pour :
- Obtenir tous les mots ordonnés par ordre alphabétique
- Insérer un mot
-
Supprimer tous les mots
-
Effectuez un clic droit sur app > java > com.example.enetcom.roomwordsample, puis sélectionnez New > Package.
- Saisissez
data.dbcomme dernière partie du nom du package. - Effectuez un clic droit sur le package
data.db, puis sélectionnez New > Java Class. - Saisissez
WordDaocomme nom et sélectionnez interface. - Copiez et collez le code suivant dans
WordDaoet corrigez les imports si nécessaire :
Expliquons-le point par point :
WordDaoest une interface ; les DAO doivent être soit des interfaces, soit des classes abstraites.- L'annotation
@Daoidentifie une interface comme un DAO pour Room. void insert(Word word);: Déclare une méthode pour insérer un mot.- L'annotation
@Insertest une annotation spéciale de méthode DAO qui vous permet d'insérer des données dans la base de données sans avoir à écrire de SQL ! (Il existe également des annotations@Deleteet@Updatepour supprimer et mettre à jour des lignes, mais vous ne les utilisez pas dans cette application.) onConflict = OnConflictStrategy.IGNORE: La stratégie de conflit sélectionnée ignore un nouveau mot s'il est exactement le même qu'un mot déjà présent dans la liste. Pour en savoir plus sur les stratégies de conflit disponibles, consultez la documentation.deleteAll(): Déclare une méthode pour supprimer tous les mots.- Il n'y a pas d'annotation pratique pour supprimer plusieurs entités, elle est donc annotée avec l'annotation générique
@Query. @Query("DELETE FROM word_table"):@Queryrequiert que vous fournissiez une requête SQL en tant que paramètre de chaîne à l'annotation.List<Word> getAlphabetizedWords(): Une méthode pour récupérer tous les mots et renvoyer une liste (List) de mots (Word).@Query("SELECT * FROM word_table ORDER BY word ASC"): Renvoie une liste de mots triés par ordre croissant (alphabétique).
En savoir plus
Pour plus d'informations sur les DAO Room, consultez la documentation officielle.