1. 백준문제
2. android-kotlin : romm
2. android-kotlin : romm
dependency 추가
dependencies {
def room_version = "2.3.0"
implementation "androidx.room:room-runtime:$room_version"
annotationProcessor "androidx.room:room-compiler:$room_version"
// optional - RxJava2 support for Room
implementation "androidx.room:room-rxjava2:$room_version"
// optional - RxJava3 support for Room
implementation "androidx.room:room-rxjava3:$room_version"
// optional - Guava support for Room, including Optional and ListenableFuture
implementation "androidx.room:room-guava:$room_version"
// optional - Test helpers
testImplementation "androidx.room:room-testing:$room_version"
// optional - Paging 3 Integration
implementation "androidx.room:room-paging:2.4.0-rc01"
}
Room에는 세 가지 구성요소
1. Data entities
DB에서 테이블
data class를 정의하고, 그 위에 @Entity라는 어노테이션이 필요하다.
@Entity로 정의
하나 이상의 @PrimaryKey 가 필요
단일키 : @PrimaryKey val id: Int
복합키 : @Entity(primaryKeys = ["firstName", "lastName"])
기본적으로 Room은 데이터베이스의 테이블 이름을 클래스 이름으로 사용.
만약 다른 이름을 사용하려면 @Entity 의 tableName 속성을 사용 (@Entity(tableName = "users"))
컬럼을 사용하고 싶지 않은 필든는 @Ignore
full-text search 지원. (다음에..)
indices (다음에..)
@AutoValue (다음에..)
2. DAO
참고 https://developer.android.com/training/data-storage/room/accessing-data
@Insert
파라미터는 @Entity 나 entity 콜랙션
@Update (다음에..)
@Delete (다음에..)
@Query
@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>
@Query("SELECT * FROM user WHERE region IN (:regions)")
fun loadUsersFromRegions(regions: List<String>): List<User>
Return a multimap (다음에..)
Special return types (다음에..)
3. database class
@Database 어노테이션 사용
entities 배열이 있어야함.
RoomDatabase 를 상속받은 추상클래스 여야함.
@Database(entities = [User::class], version = 1)
abstract class AppDatabase : RoomDatabase() {
abstract fun userDao(): UserDao
}