Créer l'entité Word¶
Les données de cette application sont des mots, et vous aurez besoin d'une table simple pour stocker ces valeurs :
Les composants d'architecture vous permettent de créer une table via une entité (Entity). Faisons-le maintenant.
2.1 Créer la classe Word¶
- Effectuez un clic droit sur app > java > com.example.enetcom.roomwordsample, puis sélectionnez New > Package.
- Saisissez
modelcomme dernière partie du nom du package. - Effectuez un clic droit sur le package
model, puis sélectionnez New > Kotlin Class/File. -
Saisissez
Wordcomme nom et sélectionnez Class. Cette classe décrira l'entité (qui représente la tableSQLite) pour vos mots. Chaque propriété de la classe représente une colonne de la table. Room utilisera ces propriétés pour créer la table et instancier des objets à partir de lignes de la base de données. Voici le code :model/Word.kt
Classe de données Kotlin
Le mot-clé data class demande à Kotlin de générer automatiquement les fonctions equals(), hashCode(), toString() et copy(). Par ailleurs, la propriété val word, déclarée directement dans le constructeur, génère automatiquement l'accesseur getWord() dont Room a besoin : il n'y a donc plus de code répétitif à écrire.
2.2 Annoter la classe Word¶
Pour que la classe Word ait un sens pour une base de données Room, vous devez l'annoter. Les annotations identifient la manière dont chaque partie de cette classe se rapporte à une entrée dans la base de données. Room utilise ces informations pour générer du code.
Mettez à jour votre classe Word avec des annotations comme indiqué dans ce code. Comparez-le au schéma de la table : chaque annotation correspond à un élément du schéma.
| model/Word.kt | |
|---|---|
- Nom de la table : la table SQLite s'appelle
word_table. - Primary Key (clé primaire) : la colonne
wordidentifie chaque ligne de la table de manière unique. - Nom de la colonne : la colonne s'appelle
word. - Type de donnée :
String(type non nullable) correspond à une colonne de typeTEXT NOT NULL.
Imports automatiques
Lorsque vous copiez et collez du code, vous devrez peut-être importer les classes d'annotation manuellement. Vous pouvez placer le curseur sur le code de chaque erreur et utiliser le raccourci clavier Project quick fix (Alt+Entrée sur Windows/Linux, Option+Entrée sur Mac) pour importer les classes rapidement :
import androidx.room.ColumnInfoimport androidx.room.Entityimport androidx.room.PrimaryKey
Notez que si vous tapez les annotations vous-même (au lieu de les coller), Android Studio les importera automatiquement.
Voyons ce que font ces annotations :
@Entity(tableName = "word_table"): Chaque classe@Entityreprésente une table SQLite. Annotez la déclaration de votre classe pour indiquer qu'il s'agit d'une entité. Vous pouvez spécifier le nom de la table si vous souhaitez qu'il soit différent du nom de la classe. Ici, nous nommons la table "word_table".@PrimaryKey: Chaque entité a besoin d'une clé primaire. Pour simplifier les choses, chaque mot agit comme sa propre clé primaire.@ColumnInfo(name = "word"): Spécifie le nom de la colonne dans la table si vous souhaitez qu'il soit différent du nom de la propriété. Ici, les deux noms sont identiques : l'annotation est donc facultative, mais elle rend le mappage explicite.- Type non nullable : en Kotlin, le type
String(sans?) ne peut jamais valoirnull. Room crée donc la colonne avec la contrainteNOT NULL, sans qu'il soit nécessaire d'ajouter l'annotation@NonNullutilisée en Java. - Chaque propriété stockée dans la base de données doit être accessible par Room (publique, ou dotée d'un « getter »). Cet exemple fournit automatiquement un accesseur
getWord()grâce à la propriétéval word.
Vous trouverez une liste complète des annotations dans la référence du package Room.
Génération automatique de clés
Vous pouvez générer automatiquement (autogenerate) des clés uniques en annotant la clé primaire de la manière suivante :
- La valeur par défaut
0indique à Room de générer lui-même l'identifiant lors de l'insertion.
Vous utiliserez la génération automatique dans la deuxième partie du codelab.
