-
16.[Android] Room정의Android 2019. 11. 15. 15:05반응형
Room은 SQLite에 대한 추상화 계층을 가지므로 모든 기능을 사용할 수 있는 라이브러리입니다.
Room은 Database, Entity, DAO라는 3가지의 주요 요소가 존재합니다.
Database는 Database Holder를 포함하고 Data와의 연결을 위한 기본 액세스 지점 역할을 합니다.
- @Database를 상단에 적어줍니다.
- RomeDatabase를 확장하는 추상 클래스입니다.
- Database와 연관된 Entity를 포함시킵니다.
- 인수가 0인 추상 메서드를 포함하고 DAO를 리턴합니다.
- 인스턴스로 Room.databaseBuilder()와 Room.inMemoryDatabaseBulider()를 이용하여 Database를 호출합니다.
@Database(entities = arrayOf(User::class), version = 1) abstract class AppDatabase : RoomDatabase() { abstract fun userDao(): UserDao }
val db = Room.databaseBuilder( applicationContext, AppDatabase::class.java, "database-name" ).build()
Entity는 Database내의 table을 구성합니다.
- Entity는 최소 하나의 PrimaryKey를 정의해야 됩니다. ( field 값이 하나만 있어도 @PrimaryKey를 정의해줘야 합니다.)
- 자동으로 id값을 할당하고 싶다면 @PrimaryKey의 autoGenerate 속성을 이용할 수 있습니다.
- Entity에 복합 기본키가 있는 경우에는 primaryKeys의 속성을 사용할 수 있습니다.
- default값으로 table의 이름은 class의 이름으로 설정되어 있습니다. 변경을 원한다면 tableName을 사용하여 변경할 수 있습니다.
@Entity(tableName = "users") // 테이블 이름 변경시
- 마찬가지로 table의 열 이름은 field의 이름이 default 값입니다. 변경을 원한다면 @ColunmInfo를 사용하여 변경할 수 있습니다.
- Entity는 기본적으로 field에 대한 열을 생성합니다 하지만 특정 field를 생성하고 싶지 않다면 @Ignore를 사용하면 됩니다.
@Entity(primaryKeys = arrayOf("firstName", "lastName")) // PrimaryKey가 여러개일 경우 data class User( @PrimaryKey val uid: Int, // PrimaryKey가 하나 일경우 @ColumnInfo(name = "first_name") val firstName: String?, // 열의 이름 변경 @ColumnInfo(name = "last_name") val lastName: String? @Ignore val picture: Bitmap? // Ignore fileds )
DAO는 Database에 접근할 때 사용되는 메서드들을 구성합니다.
- @Insert는 data를 삽입할 때 사용합니다.
- @Update는 data를 변경할 때 사용합니다.
- @Delete는 data를 삭제할 때 사용합니다.
- @Query는 읽고 쓰는 작업을 수행합니다. 만약 문제가 생긴다면 컴파일 오류가 발생합니다.
@Dao interface UserDao { @Query("SELECT * FROM user") fun getAll(): List<User> @Query("SELECT * FROM user WHERE uid IN (:userIds)") fun loadAllByIds(userIds: IntArray): List<User> @Query("SELECT * FROM user WHERE first_name LIKE :first AND " + "last_name LIKE :last LIMIT 1") fun findByName(first: String, last: String): User @Insert fun insertAll(vararg users: User) @Update fun updateUsers(vararg users: User) @Delete fun delete(user: User) }
반응형'Android' 카테고리의 다른 글
키보드 숨기기 (0) 2020.09.02 Android architecture - Model (0) 2020.02.21 15.[Android] Fragment로 대소문자 변환기 만들어보기 (0) 2019.10.14 14.[Android] activity간 데이터 전달 (계산기) (0) 2019.10.13 13.[Android] RecyclerView 예제 (0) 2019.09.06