본문 바로가기

Android/AAC(Android Architecture Component)

Room 정리

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/

 

Save data in a local database using Room  |  Android Developers

Learn to persist data more easily using the Room Library

developer.android.com

https://namget.tistory.com/entry/안드로이드-ROOM-라이브러리-사용하기-코루틴

 

[안드로이드] ROOM 라이브러리 사용하기 , 코루틴

안녕하세요 남갯입니다 오늘은 구글 JetPack componet에 포함된 ROOM에 대해 포스팅해보려고합니다. 스스로 정리해서 작성하는것이기때문에 틀린점이나 비판은 댓글에 달아주시면 달게받겠습니다. - JetPack compo..

namget.tistory.com

https://black-jin0427.tistory.com/53

 

[Android Architecture Component] Room 라이브러리 사용하기

안녕하세요. 블랙진 입니다. Android Architecture Component 중 Room 라이브러리 사용에 관해 포스팅하겠습니다. ORM? Room 를 알아보기 전에 ORM 에 대한 개념을 살펴보겠습니다. ORM이란 Object Relational Map..

black-jin0427.tistory.com

https://blog.naver.com/rjs5730/221300737276

 

(Android) Room Persistence Library(Room Database)

Room Database는 내장된 SQLite 기능을 활용하여 데이터베이스를 사용할 수 있습니다. (※SQLite -...

blog.naver.com

 

'Android > AAC(Android Architecture Component)' 카테고리의 다른 글

Paging Library 정리  (0) 2019.07.03
LiveData 정리  (1) 2019.06.28