fkm blog

software開発に関することを書いていきます

Android Jetpack - Roomを使ってみる(0)

(実際に書いた日とエントリーの日付がだいぶずれてきたので、小ネタで)

Android JetpackにRoomというライブラリがあります。

Room Persistence Library  |  Android Developers

SQLiteDatabase を簡単に扱えるようにしてくれるライブラリ。

導入する

バージョンの部分はAndroid Studioの機能で最新にしちゃってください。アノテーションの処理もあるのでkaptも追加。

implementation 'androidx.room:room-runtime:2.0.0'
kapt "androidx.room:room-compiler:2.0.0"

Entityを作る

テーブル定義になる。 idname の2カラムなテーブルを作ってみる。

@Entity
data class User(
        @PrimaryKey(autoGenerate = true)
        val id: Int,
        val name: String)

DAOを作る

CRUDは勝手に生えないので、インターフェースで作る。

@Dao
interface UserDAO {
    @Insert(onConflict = OnConflictStrategy.REPLACE)
    fun create(user: User)

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

    @Update
    fun update(user: User)

    @Delete
    fun delete(user: User)
}

Databaseの定義を作る

どのEntity(=table)があるかを書いてあげます。

@Database(entities = [User::class], version = 1)
abstract class MyDataBase : RoomDatabase() {
    abstract fun userDAO(): UserDAO
}

Databaseを作る

ViewModelにでも持たせておきましょう。

class AppViewModel(app: Application) : AndroidViewModel(app) {
    val db = Room.databaseBuilder(app, MyDataBase::class.java, "user").build()
}

慣れてしまえば、自力で CREATE TABLE 文書く必要がなくなるので、お手軽。