EntityとDAO
テーブルとデータアクセスオブジェクトを定義します
「EntityとDAO」はCoddyKit上の無料Android Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはAndroid Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Android Academyコースには全4レッスンが含まれています。
Roomとは
RoomはSQLiteの抽象化レイヤーを提供する永続化ライブラリです。コンパイル時にクエリを検証しながら、データベースの行をKotlinオブジェクトとして扱えます。
Roomを構成する3つの要素
- Entity — データクラスで表現するテーブルです。
- DAO — Data Access Objectの略で、クエリを定義します。
- Database — EntityとDAOをまとめます(次のレッスン)。
Entityを定義する
データクラスに@Entityアノテーションを付けます。各プロパティが列になります。
import androidx.room.Entity
import androidx.room.PrimaryKey
@Entity(tableName = "users")
data class User(
@PrimaryKey val id: Int,
val name: String,
val email: String
)主キー
すべてのEntityには@PrimaryKeyが必要です。RoomにIDを自動生成させるには、autoGenerateを使用します。
@Entity
data class Note(
@PrimaryKey(autoGenerate = true)
val id: Int = 0,
val text: String
)列のカスタマイズ
@ColumnInfoを使うと、列名を変更したり、型の親和性を設定したりできます。
import androidx.room.ColumnInfo
@Entity
data class User(
@PrimaryKey val id: Int,
@ColumnInfo(name = "full_name")
val name: String
)DAOとは
DAOは@Daoアノテーションを付けたインターフェースです。アプリがデータの読み取りや書き込みに使用するメソッドを宣言します。実装はRoomが生成します。
Insert、Update、Delete
Roomは基本操作用の便利なアノテーションを提供します。
@Dao
interface UserDao {
@Insert
suspend fun insert(user: User)
@Update
suspend fun update(user: User)
@Delete
suspend fun delete(user: User)
}競合時の戦略
すでに存在する行を挿入するときは、onConflictで戦略を選択します。
@Insert(onConflict = OnConflictStrategy.REPLACE)
suspend fun upsert(user: User)@Queryによるカスタムクエリ
@Queryアノテーションを使うと、SQLを記述できます。Roomはスキーマに対してコンパイル時に検証します。
@Query("SELECT * FROM users WHERE id = :id")
suspend fun getById(id: Int): User?なぜsuspend関数を使うのか
データベースI/Oをメインスレッドで実行してはいけません。DAOメソッドにsuspendを付けると、コルーチンから呼び出したときにRoomがメインスレッド以外で実行するため、UIのカクつきを防げます。
コンパイル時の安全性
Roomの大きな利点の1つは、@Queryで列名を間違えるとビルドに失敗することです。実行時ではなく、早い段階でエラーを発見できます。
理解度チェック
EntityとDAOについての理解度を確認しましょう。
まとめ
学んだこと:
@Entityは、@PrimaryKeyを持つデータクラスとしてテーブルを定義します。@Daoは、クエリ、挿入、更新、削除のメソッドを宣言します。@QueryのSQLはコンパイル時に検証されます。- DAOメソッドは、メインスレッド以外でI/Oを行うために
suspendにする必要があります。
よくある質問
「EntityとDAO」レッスンは無料ですか?
はい。「EntityとDAO」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Android Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Android Academyコースには全4レッスンが含まれています。
「EntityとDAO」で何を学びますか?
テーブルとデータアクセスオブジェクトを定義します ブラウザで直接実行するハンズオンコードでAndroid Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Android Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのAndroid Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「EntityとDAO」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このAndroid Academyレッスンでコードを書いて実行できますか?
はい。すべてのAndroid Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。