1. dependency 추가
implementation 'androidx.room:room-runtime:2.3.0'
implementation 'androidx.room:room-compiler:2.3.0'
2. 구조
- database
- entities
- dao
1. Database
@Database로 주석이 된 클래스는 다음 조건을 만족해야한다
- RoomDatabase를 확장하는 추상클래스여야 한다.
- 주석 내 데이터베이스와 연결된 항목의 목록을 포함해야 한다.
- 인수가 0개이며 @Dao로 주석이 지정된 클래스를 반환하는 추상 메서드를 포함해야한다.
// database : 데이터베이스 홀더를 포함하여 앱의 기본 연결을 위한 기본 액세스 포인트 역할
// entities(Class[]) : 데이터베이스에 포함된 엔티티 목록
// exportSchema(boolean) : ( room.schemaLocation)를 설정 하여 Room에 스키마를 폴더로 내보내도록 지시 할 수 있다
// version(int) : 데이터베이스 버전
@Database(entities = [User::class], version = 1, exportSchema = false)
abstract class UserDatabase : RoomDatabase() {
abstract fun userDao(): UserDao
}
2. Entities
// entities : 데이터베이스 내의 테이블
@Entity(tableName = "User")
data class User(
@PrimaryKey(autoGenerate = true)
var uid: Int,
@ColumnInfo(name = "first_name")
var firstName: String?,
@ColumnInfo(name = "last_name")
var lastName: String?
){
//...//
}
3. Dao
// dao : 데이터베이스에 액세스하는 데 사용되는 메서드
@Dao
interface UserDao {
@get:Query("SELECT * FROM user")
val allUser: List<User> // @Query("SELECT * FROM user")\nfun getAll(): List<User>
@Insert(onConflict = OnConflictStrategy.REPLACE)
fun insertUser(vararg users: User)
@Delete
fun deleteUser(user: User)
}
3. 생성한 데이터베이스 인스턴스 가져오기
val db = Room.databaseBuilder(
applicationContext,
UserDatabase::class.java, "database-name"
).build()
Ref
'System Programming > Android' 카테고리의 다른 글
[Android] Jetpack Compose (0) | 2021.08.05 |
---|---|
[Android/Kotlin] Kotlin extension (0) | 2021.07.08 |
[Android/Firebase] Firebase CRUD (0) | 2021.07.03 |
[Android/Firebase] Firebase Upload pdf (0) | 2021.07.01 |
[Android/Firebase] Firebase Database, Storage (0) | 2021.06.30 |