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

Entity 생성하기 본문

Android Jetpack Architecture/Room

Entity 생성하기

hik14 2020. 8. 23. 16:17

Entity 생성

@Entity 애노테이션을 붙이고 프로퍼티를 생성함으로써 개체를 정의할 수 있다.

  @Entity
    data class User(
        @PrimaryKey var id: Int,
        var firstName: String?,
        var lastName: String?
    )

Database 클래스의 entities 배열을 통해 entity클래스를 참조해야 되고, 테이블로서 생성된다.

 

필드를 유지하려면 Room에서 필드에 액세스 할 수 있어야 합니다.

필드를 공개(public) 상태로 설정하거나 필드에 getter 및 setter를 제공할 수 있습니다.

getter 및 setter 메서드를 사용하는 경우 이러한 메서드는 Room의 JavaBeans 규칙을 기반으로 합니다.

 

*참고 : entity는 빈 생성자(상응하는 DAO 클래스가 각 지속 필드에 액세스할 수 있는 경우) 또는 매개변수에 entity의 필드와 일치하는 타입 및 이름이 포함된 생성자가 있을 수 있습니다.

또한 Room은 일부 필드만 수신하는 생성자와 같이 전체 또는 부분 생성자를 사용할 수도 있습니다.

 

Primary Key

entity는 하나 이상의 필드를 기본 키로 정의해야 합니다. 필드가 하나만 있는 경우에도 @PrimaryKey 주석을 사용하여 필드에 주석을 달아야 합니다.

또한 Room에서 항목에 자동 ID를 할당하게 하려면 @PrimaryKey autoGenerate 속성을 설정하면 됩니다.

entity에 복합 기본 키(2개의 필드가 1개의 기본키 역할을 한다.)가 있으면 다음 코드 스니펫과 같이 @Entity 주석의 primaryKeys 속성을 사용할 수 있습니다.

@Entity(primaryKeys = arrayOf("firstName", "lastName"))
    data class User(
        val firstName: String?,
        val lastName: String?
    )

 

테이블 이름 및 각 칼럼의 이름 설정 하기

기본적으로 Room은 클래스 이름을 데이터베이스 테이블 이름으로 사용한다.

테이블의 이름을 다르게 지정하려면 다음 코드 스니펫과 같이 @Entity 주석의 tableName 속성을 설정하세요.

 

tableName 속성과 마찬가지로 Room은 필드 이름을 데이터베이스의 열 이름으로 사용합니다. 열 이름을 다르게 지정하려면 다음 코드 스니펫과 같이 @ColumnInfo 주석을 필드에 추가하세요.

@Entity(tableName = "users")  // 테이블 이름 설정. 
    data class User (
        @PrimaryKey val id: Int,
        @ColumnInfo(name = "first_name") val firstName: String?,  // 컬럼 이름 설정
        @ColumnInfo(name = "last_name") val lastName: String?   // 컬럼 이름 설정
    )

필드 무시

기본적으로 Room은 항목에 정의된 각 필드의 열을 생성합니다.

유지하지 않으려는 필드가 항목에 있으면 다음 코드 스니펫과 같이 @Ignore를 사용하여 필드에 주석을 달 수 있습니다.

@Entity
    data class User(
        @PrimaryKey val id: Int,
        val firstName: String?,
        val lastName: String?,
        @Ignore val picture: Bitmap?
    )

entity가 필드를 상속하는 경우 일반적으로 @Entity 속성의 ignoredColumns 속성을 사용하는 것이 더 쉽습니다.

open class User {
        var picture: Bitmap? = null
    }

    @Entity(ignoredColumns = arrayOf("picture"))
    data class RemoteUser(
        @PrimaryKey val id: Int,
        val hasVpn: Boolean
    ) : User()

 

'Android Jetpack Architecture > Room' 카테고리의 다른 글

뷰 만들기  (0) 2020.08.24
중첩된 관계 정의  (0) 2020.08.23
객체 간 관계 정의  (0) 2020.08.23
테이블 검색 지원  (0) 2020.08.23
Room 개요  (0) 2020.08.22