
다음의 종속 항목을 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"
}
포인트(포인터) 역할을 함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; }
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 삽입할 새 행을 만들 수 있음.
