Android/Room/DAO
Android/Room
Data Access Objectの略。
データベース操作をinterfaceで定義しておくと、Roomがbuild時にデータベース操作を行うクラスを生成してくれる。
内部的にはJava/アノテーションなどを利用している
DAOはデータベースの操作をうまくまとめてくれる
直接SQLiteを叩いて、データを連れてきて、をする必要がなく、DAOによりKotlinのメソッドを呼び出すだけでよくなる
golangのライブラリでいうところのsqlc的な機能?
アノテーションの例
@Insert
アイテムの作成
対応するメソッドは対象とするアイテム(Android/Room/Entityベースのクラス)を引数とする
@Update
アイテムの更新
対応するメソッドは対象とするアイテム(Android/Room/Entityベースのクラス)を引数とする
@Delete
アイテムの削除
@Query
その名の通り、データの取得や上記アノテーションではできないことを扱う
アノテーションの引数にSQL文を記述する
記述されたSQL文はコンパイル時に検査される
例: @Query("SELECT * FROM posts")
返り値にはKotlin/Flowを使うとよい
データベース内のデータが変更された場合にその値へ通知される
つまり最新の状態に保たれる
明示的に取得するのは1回だけでよくなる
バックグラウンドで実行されるようになる
明示的にKotlin/suspendにする必要はない
参考
https://qiita.com/iTakahiro/items/7e0d63140ae4dac10d18
https://developer.android.com/codelabs/basic-android-kotlin-compose-persisting-data-room?hl=ja#5