1. install

apply plugin: 'kotlin-kapt'

dependencies {
  def room_version = "2.2.3"

	implementation "androidx.room:room-runtime:$room_version"
	kapt "androidx.room:room-compiler:$room_version" // kotlin 기반 앱일 경우 kapt로 디펜던시 추가
	implementation "androidx.room:room-ktx:$room_version" // Kotlin Extensions and Coroutines support
}

2. document

Save data in a local database using Room | Android Developers

3. tutorial

테이블 정의

@Entity(
    tableName = "memo"
)
data class Memo(
    @PrimaryKey(autoGenerate = true) val id: Int,
    val title: String,
    @ColumnInfo(name="contents") val contents: String
)

----

@Entity(
    tableName = "image",
    foreignKeys = [ForeignKey(
        entity = Memo::class,
        parentColumns = arrayOf("id"),
        childColumns = arrayOf("memoId")
    )]
)
data class Image(
    @PrimaryKey(autoGenerate = true) val id: Int,
    val memoId: Int,
    val imageType: ImageType,
    val image: String
)

쿼리 사용

@Dao
interface MemoDao {

    @Query("SELECT * FROM memo INNER JOIN image ON memo.id = image.memoId")
    fun getAll(): List<Memo>

    @Query("SELECT * FROM memo INNER JOIN image ON memo.id = image.memoId WHERE id = :id")
    fun getOneMemo(id: Int): Memo

}

----

@Dao
interface MyDao {
	@Query("SELECT * FROM user WHERE age BETWEEN :minAge AND :maxAge")
  fun loadAllUsersBetweenAges(minAge: Int, maxAge: Int): Array<User>

  @Query("SELECT * FROM user WHERE first_name LIKE :search " +
               "OR last_name LIKE :search")
  fun findUserWithName(search: String): List<User>
}