0Pricing
Android Academy · レッスン

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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. EntityとDAO
  2. Room Databaseクラス
  3. クエリとリレーションシップ
  4. Flowでデータを監視する
← Android Academyに戻る