Android - Room

박재원·2024년 1월 24일
0

TIL

목록 보기
37/50
post-thumbnail

Room

  • SQLite를 쉽게 사용할 수 있는 데이터베이스 객체 매핑 라이브러리
  • 쉽게 Query를 사용할 수 있는 API를 제공
  • Query를 컴파일 시간에 검증함
  • Query결과를 LiveData로하여 데이터베이스가 변경될 때 마다 쉽게 UI를 변경할 수 있음
  • SQLite 보다 Room을 사용할 것을 권장함

장점

  • SQL 쿼리의 컴파일 시간 확인
  • 반복적이고 오류가 발생하기 쉬운 상용구 코드를 최소화하는 편의 주석
  • 간소화된 데이터베이스 이전 경로

설정방법

plugins {
    id 'kotlin-kapt'
}

dependencies {
    def room_version = "2.5.1"
    implementation "androidx.room:room-runtime:$room_version"
    annotationProcessor "androidx.room:room-compiler:$room_version"
    kapt "androidx.room:room-compiler:$room_version"
    // optional - Kotlin Extensions and Coroutines support for Room
    implementation "androidx.room:room-ktx:$room_version"
    // optional - Test helpers
    testImplementation "androidx.room:room-testing:$room_version"
}

Entity 정의

  • 데이터 베이스의 테이블 행 역할을 한다.
  • 반드시 PrimaryKey가 있어야 한다. (자동 생성은 autoGenerate = true 속성 추가)
  • 기본적으로 클래스 이름이 테이블명이지만 따로 지정은 @Entity(tableName = " ")을 사용한다.

e.g. CREATE TABLE student_table (student_id INTEGER PRIMARY KEY, name TEXT NOT NULL);

@Entity(tableName = "student_table")    // 테이블 이름을 student_table로 지정함
data class Student (
    @PrimaryKey 
		@ColumnInfo(name = "student_id") 
    val id: Int,
    val name: String
)

DAO 정의

  • 인터페이스나 추상 클래스로 정의 가능.
  • 일반적으로 인터페이스로 구현. @Dao 어노테이션 필수이다.
  • 앱 데이터베이스의 데이터와 상호작용하는 메소드를 하나 이상 정의한다.
  • 가능한 annotation으로 @Insert, @Update, @Delete, @Query가 있다.

0개의 댓글