Android Jetpack: Room

[로켓 블래스트 끄기] FLORINA MUNTENESCU : Google I / O 2017에서 우리는 방으로의 문 열어, 끈기 SQ Lite를 통해 추상화 레이어를 제공하는 라이브러리 Room은 버전 2

0에 도달했으며 Jetpack의 일부입니다 신고 한 버그를 수정하고 일부 기능을 추가했습니다 너는 물었다 방의 주요 구성 요소를 살펴 보겠습니다 지원되는 쿼리를 확인하고, 마이그레이션 구현 방법 및 테스트 방법 데이터베이스 작업

사용자 테이블을 원한다고 가정 해 보겠습니다 너는 그 테이블의 모든 줄을 원해 사용자 클래스의 인스턴스가됩니다 해당 실체로 수업에 주석을 답니다 테이블 이름을 정의하지 않은 경우 클래스 이름을 사용하고 싶다

tableName으로 필수 기본 키를 설정하고, 및 선택적 열 정보 그러나 열의 이름을 변경하려는 경우에만 가능합니다 그렇지 않으면 필드 이름이 사용됩니다 그리고 그게 다야 방이 사용자 테이블 작성을 담당합니다

너를 위해서 이것이 엔티티가 완료되는 방법입니다 그러나 데이터베이스의 데이터에 액세스하는 방법이 필요합니다 간단히 말해 데이터 액세스 개체 인 DAO를 사용합니다 보다 정확하게 인터페이스를 생성하십시오

@Dao 주석을 달아주세요 이 인터페이스에서 모든 메소드 선언 데이터베이스 작업에 필요한 해당 SQL 쿼리로 주석을 달기 방에서 이러한 방법을 구현합니다 지원되는 쿼리는 삽입, 업데이트, 삭제, 쿼리, 및 rawquery rawquery를 제외한 모든 항목을 검사합니다

컴파일 타임에, 당신이 잘못된 쿼리를 작성하면 즉시 확인할 수 있습니다 엔티티와 DAO를 하나로 묶는 클래스 방 데이터베이스입니다 방 데이터베이스를 확장하는 추가 클래스를 만듭니다 주석 달기 엔티티와 해당 DAO를 선언하십시오

쿼리를 자세히 살펴 보겠습니다 쿼리 및 rawquery의 반환 유형 전체 엔티티 일 수도 있지만 필드의 서브 세트 일 수도 있습니다 구아바 또는 옵션으로 작업하는 경우 Java 유틸리티 패키지에서 리턴 유형으로 사용하십시오 즉, 값이없는 경우 귀하의 질의를 만족 시키려면 귀하의 질의 Optionalempty 또는 Optional

absent를 반환합니다 어떤 옵션을 선택 하느냐에 따라 다릅니다 이 모든 쿼리는 동기식입니다 동일한 스레드에서 실행됨을 의미합니다 당신이 그 (것)들을에서 방아쇠를 당기는 당신

방은 오류를 던져 모범 사례를 따르도록 보장합니다 주 스레드에서 쿼리를 실행하는 경우 따라서 Android에서 스레드를 처리하는 기본 방법을 사용하십시오 그리고 당신이 메인 스레드에서 벗어 났는지 확인하십시오 비동기 쿼리도 지원하는 방 LiveData 또는 RXJava로 작업 할 때 게다가 LiveData를 반환하는 쿼리, 또는 [? flowable,?]는 관찰 가능한 질의이고, 매번 알림을 받음을 의미합니다

테이블의 데이터 또는 테이블 업데이트 데이터베이스 스키마를 변경할 때마다 열이나 표를 추가하거나 이름을 변경했기 때문에, 당신은 그 변화를 다루는 방법을 데이터베이스에 알릴 필요가있다 데이터베이스 클래스에서이를 수행하려면 먼저 데이터베이스 버전을 업데이트해야합니다 둘째, 마이그레이션 클래스를 구현합니다 이전 스키마에서 마이그레이션을 처리하는 방법을 정의하는 새로운 것에 그런 다음 세 번째로 해당 마이그레이션 클래스를 추가합니다

데이터베이스 필터의 매개 변수로 사용합니다 마이그레이션을 트리거 한 후 룸 마이그레이션을 확실히하기 위해 스키마의 유효성을 검사합니다 올바르게했다 마이그레이션을 처리하지 않으려면, 데이터베이스 데이터를 보존 할 필요가 없으며, fallbacktodestructivemigrations를 호출하십시오 데이터베이스를 구축 할 때

파괴적인 데이터베이스 재현 on 특정 버전에서만 호출 출석 정지 그리고 해당 버전의 번호를 제공하십시오 따라서 엔티티, DAO, 데이터베이스 및 마이그레이션이 있습니다 어떻게 테스트합니까? DAO를 테스트하려면 Android JUnit을 구현해야합니다 in-memory 데이터베이스를 만드는 테스트

메모리 내 데이터베이스는 데이터를 보유합니다 그 과정이 살아있는 동안에 만, 이는 모든 테스트 후에 데이터베이스가 파괴된다는 것을 의미합니다 비동기 쿼리를 테스트하려면 instanttaskexecutorrule을 사용하십시오 각 작업을 동 기적으로 실행합니다 앱의 구현에서 결국 다른 클래스의 DAO를 참조합니다

이러한 클래스를 단위 테스트하려면 DAO를 조롱하십시오 또는 가짜 버전을 구현하십시오 여기에 또 다른 팁이 있습니다 에스프레소 테스트를 수행하기 위해 비동기 쿼리를 사용하는 코드, 계수 법을 확장하다 작업을 시작하고 마칠 때 작업을 계산합니다 마지막으로 마이그레이션을 테스트하는 것을 잊지 마십시오

먼저 데이터베이스 스키마를 탐색하고, 다른 유용한 테스트 규칙 인 마이그레이션 테스트를 사용하십시오 이 클래스를 사용하면 이전 버전의 데이터베이스를 만들 수 있습니다 각 마이그레이션을 실행하고 유효성을 검사하십시오 당신이해야 할 일은 데이터가 이전 버전에 삽입했습니다 이전 후에도 존재합니다

승인 그래서 이것을 요약 해 봅시다 상용구가 적은 코드 컴파일 타임 검사 된 쿼리 마이그레이션을 쉽게 구현할 수 있습니다

높은 수준의 테스트 용이 그리고 데이터베이스 유지 확인 주 스레드에서 멀리 떨어져 일하십시오 모든 Room의 품질은 데이터베이스로 작업하는 것이 더 쉽고 즐겁습니다 당신은 더 나은 애플 리케이션을 제공합니다 [로켓 발사 끄기]