ORM(Object Relational Mapping) 라이브러리
ORM
ORM이란 Object Relational Mapping 으로 데이터베이스와 객체 지향 프로그래밍 언어간의 호환되지 않는 데이터를 변환하는 프로그래밍 기법으로 DB 테이블과 매핑되는 객체를 만들고 그 객체에서 DB를 관리하는 것입니다.
구성요소
- Database
- 데이터베이스 보유자
- 데이터 베이스 홀더를 포함하고, 관계형 데이터 베이스에 접근할 수 있는 엑세스 포인트를 제공
- 조건
- extends RoomDatabase 하는 abstract class
- class내부에 Dao를 정의
- annotation에 entities(table구조와 mapping되는)를 포함
- 생성하는 코드가 비용이 많이 들기 때문에 singleton으로 구현
@Database(entities={User.class}, version=1)
public abstract class AppDatabase extends RoomDatabase {
abstract fun userDao() : UserDao
//Room Database는 싱글톤 패턴을 해야한다.
companion object {
@Volatile private var instance: AppDatabase? = null
private val LOCK = Any()
operator fun invoke(context: Context) = instance ?: synchronized(LOCK) {
instance ?: buildDatabase(context).also { instance = it }
}
private fun buildDatabase(context: Context) =
Room.databaseBuilder(context.applicationContext,
AppDatabase::class.java,"Users.db")
.build()
}
}
- Entity
- Database안에 있는 테이블을 java / Kotlin 클래스로 표현
@Entity
data class User(
@PrimaryKey val uid: Int,
@ColumnInfo(name = "first_name") val firstName: String?,
@ColumnInfo(name = "last_name") val lastName: String?
)
- Dao
- Database Access Object
- 데이터베이스에 접근해서 실질적으로 insert, delete 등을 수행하는 메소드를 포함
@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)
@Delete
fun delete(user: User)
}
- 참고 자료
https://developer.android.com/training/data-storage/room/
https://namget.tistory.com/entry/안드로이드-ROOM-라이브러리-사용하기-코루틴
https://black-jin0427.tistory.com/53
https://blog.naver.com/rjs5730/221300737276
'Android > AAC(Android Architecture Component)' 카테고리의 다른 글
Paging Library 정리 (0) | 2019.07.03 |
---|---|
LiveData 정리 (1) | 2019.06.28 |