[Java/Android] Room 라이브러리를 사용한 DB 접근

hyemin's velog💬·2022년 10월 12일

안드로이드

목록 보기
2/3
post-thumbnail

♻이 글을 보고 작성하였습니다.

📑build.gradle(Module) 파일 설정

다음의 종속 항목을 build.gradle(Module) 파일에 추가한다.

dependencies {
    def room_version = "2.4.3"

    implementation "androidx.room:room-runtime:$room_version"
    annotationProcessor "androidx.room:room-compiler:$room_version"

    // To use Kotlin annotation processing tool (kapt)
    kapt "androidx.room:room-compiler:$room_version"
    // To use Kotlin Symbol Processing (KSP)
    ksp "androidx.room:room-compiler:$room_version"
    //위의 두개는 Kotlin 사용하는 프로젝트인 경우에만 넣기
    //Java는 위의 의존성 넣으면 오류남

    // optional - RxJava2 support for Room
    implementation "androidx.room:room-rxjava2:$room_version"

    // optional - RxJava3 support for Room
    implementation "androidx.room:room-rxjava3:$room_version"

    // optional - Guava support for Room, including Optional and ListenableFuture
    implementation "androidx.room:room-guava:$room_version"

    // optional - Test helpers
    testImplementation "androidx.room:room-testing:$room_version"

    // optional - Paging 3 Integration
    implementation "androidx.room:room-paging:2.5.0-alpha03"
}

☘Room의 3가지 주요 구성 요소

  • Database Class : DB를 보유하고 앱의 영구 데이터와 기본 연결을 위한 기본 접근 포인트(포인터) 역할을 함

    DB를 보유할 AppDatabase 클래스를 정의

    • RoomDatabase를 확장하는 추상 클래스
    • 데이터베이스와 연결된 데이터 항목을 모두 나열하는 entities 배열이 포함된 @Database 주석이 달려야 함
    • DB와 연결된 각 DAO 클래스에서 DB 클래스는 인수가 0개, DAO 클래스의 인스턴스를 반환하는 추상 메서드를 정의해야함
    @Database(entities = {User.class}, version = 1)
    public abstract class AppDatabase extends RoomDatabase {
        public abstract UserDao userDao();
    }
  • 데이터 항목 : 앱 데이터베이스의 테이블을 나타냄

    아래는 User 데이터 항목을 정의하는 코드
    User 인스턴스는 user 테이블에 있는 행 하나를 나타냄

    @Entity
    public class User {
        @PrimaryKey
        public int uid;
    
        @ColumnInfo(name = "first_name")
        public String firstName;
    
        @ColumnInfo(name = "last_name")
        public String lastName;
    }
  • 데이터 액세스 객체(DAO) : 앱이 DB의 데이터를 select, update, insert, delete 시 사용할 수 있는 메서드 제공

    user 테이블의 데이터와 상호작용하는 데 사용하는 메서드를 제공

    @Dao
    public interface UserDao {
        @Query("SELECT * FROM user")
        List<User> getAll();
    
        @Query("SELECT * FROM user WHERE uid IN (:userIds)")
        List<User> loadAllByIds(int[] userIds);
    
        @Query("SELECT * FROM user WHERE first_name LIKE :first AND "
      			+ "last_name LIKE :last LIMIT 1")
        User findByName(String first, String last);
    
        @Insert
        void insertAll(User... users);
    
        @Delete
        void delete(User user);
    }

Database Class는 앱에 DAO 인스턴스를 제공
DAO는 연결된 데이터 항목(테이블) 객체의 인스턴스로 데이터 검색
은 정의된 데이터 항목(테이블)을 사용해 상응하는 테이블의 행을 업데이트 or 삽입할 새 행을 만들 수 있음.

  • Room 구성요소 간 관계

그림 출처


profile
기록장👻

0개의 댓글