【Kotlin/Room】@RewriteQueriesToDropUnusedColumnsアノテーションで必要なカラムのみ取得する

この記事からわかること

  • Android Studio/KotlinRoomデータベース使い方
  • @RewriteQueriesToDropUnusedColumnsアノテーション役割
  • 必要カラムデータのみを取得するには?

index

[open]

\ アプリをリリースしました /

みんなの誕生日

友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-

posted withアプリーチ

公式リファレンス:RewriteQueriesToDropUnusedColumns

環境

Roomで特定のカラムだけのデータを取得する方法

RoomでUserクラスを定義している場合にすべてのデータではなくnameプロパティ(カラム)だけのリストをデータベースから取得したい場合がありました。


@Entity(tableName = "user_table")
data class User(
    @PrimaryKey(autoGenerate = true) val id: Int,
    val name: String,
    val age: Int,
    val hobby: String
)

以下のようなクエリだとuser_tableテーブルに格納されているすべてのカラムの情報を取得し、User型にマッピングされます。


@Query("SELECT * FROM user_table")
fun getAll(): Flowable<List<User>>

ですが欲しいのはnameプロパティのみを持ったリストだけを取得したいのです。これを叶えるのが@RewriteQueriesToDropUnusedColumnsアノテーションです。

@RewriteQueriesToDropUnusedColumns

@RewriteQueriesToDropUnusedColumnsはDaoのクエリに付与することで特定のカラムのみを取得することができるようになるアノテーションです。使用するためには特定のカラムのみを持ったデータクラスを定義する必要があります。


data class UserName(val name: String)

データクラスを定義したら、返り値のデータ型に特定のカラムのみのデータ型を指定し、@RewriteQueriesToDropUnusedColumnsを付与するだけです。


@RewriteQueriesToDropUnusedColumns
@Query("SELECT * FROM user_table")
fun getAll(): Flowable<List<UserName>>

@RewriteQueriesToDropUnusedColumnsを付与しておくとコンパイル時に自動で特定のカラムのみを取得する以下のようなSQLクエリを構築してくれます。

SELECT name FROM (SELECT * FROM user_table)

まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。

ご覧いただきありがとうございました。

searchbox

スポンサー

ProFile

ame

趣味:読書,プログラミング学習,サイト制作,ブログ

IT嫌いを克服するためにITパスを取得しようと勉強してからサイト制作が趣味に変わりました笑
今はCMSを使わずこのサイトを完全自作でサイト運営中〜

New Article

index