오늘도 더 나은 코드를 작성하였습니까?

뷰 만들기 본문

Android Jetpack Architecture/Room

뷰 만들기

hik14 2020. 8. 24. 19:06

뷰 ( View ) 

- 허용된 데이터를 제한적으로 보여주기 위해서 하나 이상의 테이블에서부터 유도된 가상 테이블입니다.

 

장점

1. 논리적 독립성을 제공합니다.

2. 데이터 접근 제어로 보안 가능합니다.

- 뷰를 통해 접근하기 때문에 뷰에 나타나지 않는 데이터를 접근할 수 없다..

3. 사용자의 데이터 관리를 간단하게 합니다.

4. 하나의 테이블로 여러 개의 다른 뷰를 정의할 수 있습니다.

 

단점

1. 독자적인 인덱스를 가질 수 없습니다.

2. 한 번 정의된 뷰는 변경할 수 없으며, 삭제한 후에 다시 생성해야 합니다.

3. 삽입, 삭제, 갱신 연산에 많은 제약이 따릅니다.

 

2.1.0 이상 버전의 Room 지속성 라이브러리 SQLite 데이터베이스 뷰를 지원하므로 쿼리를 클래스로 캡슐화할 수 있습니다. Room은 이러한 쿼리 지원 클래스를 로 참조하며, 뷰는 DAO에서 사용될 때 단순한 데이터 객체와 동일하게 동작합니다

 

* Entity 마찬가지로 뷰에 관해 SELECT 문을 실행할 수 있습니다. 하지만 뷰에 관해 INSERT, UPDATE 또는 DELETE 문을 실행할 수는 없습니다.

 

 @DatabaseView 애노테이션에 SQL 명령어를 사용하여 정의한다.

@DatabaseView("SELECT user.id, user.name, user.departmentId," +
            "department.name AS departmentName FROM user " +
            "INNER JOIN department ON user.departmentId = department.id")
    data class UserDetail(
        val id: Long,
        val name: String?,
        val departmentId: Long,
        val departmentName: String?
    )

이 뷰를 앱 데이터베이스의 일부로 포함하려면 앱의 @Database 주석에 views 속성을 포함하세요.

@Database(entities = arrayOf(User::class),
              views = arrayOf(UserDetail::class), version = 1)
    abstract class AppDatabase : RoomDatabase() {
        abstract fun userDao(): UserDao
    }