일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- RXjava
- rxandroid
- RX
- Android
- deprecating the install_referrer
- Rx자바
- Retrofit2
- RxJava2
- hardcoded string search
- android P
- Switch to the Play Referrer API by March 1
- 안드로이드
- 하드코드검색
- java
- andorid studio
Archives
- Today
- Total
Lucky Dog
[안드로이드] Room Persistence Library 본문
Room Persistence Library
Room은 SQLite의 추상 레이어를 제공하여 SQLite의 모든 기능을 활용하면서 유려하게 데이터베이스 액세스를 할 수 있습니다.
Room은 SQLite의 추상 레이어를 제공하여 SQLite의 모든 기능을 활용하면서 유려하게 데이터베이스 액세스를 할 수 있습니다.
구성요소
1. Datbase
database의 holder를 만든다. annotation으로 entities(Table의 구조와 mapping되는 class)를 정의하고, 클래스 내부에 dao를 정의한다.
@Database(entities = {User.class}, version = 1)
public abstract class AppDatabase extends RoomDatabase {
public abstract UserDao userDao();
}
database의 holder를 만든다. annotation으로 entities(Table의 구조와 mapping되는 class)를 정의하고, 클래스 내부에 dao를 정의한다.
@Database(entities = {User.class}, version = 1)
public abstract class AppDatabase extends RoomDatabase {
public abstract UserDao userDao();
}
인스턴스 생성
AppDatabase db = Room.databaseBuilder(getApplicationContext(),
AppDatabase.class, "database-name").build();
2. Entity
데이터베이스 내의 테이블을 나타낸다. database의 row와 mapping되는 class, 즉 table의 구조를 나타내는데 Database에서 entities함수를 통해 접근할 수 있다.
@Entity
public class User {
@PrimaryKey
public int uid;
@ColumnInfo(name = "first_name")
public String firstName;
@ColumnInfo(name = "last_name")
public String lastName;
}
3. DAO
데이터베이스에 액세스하는 데 사용되는 메소드를 포함한다. database를 접근하는 함수들이 정의되는 class or interface. @Database로 정의된 class는 내부에 인자가 없고 @Dao annotation이 되어있는 class를 return하는 abstract 함수를 포함하고 있다.
@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);
}
CRUD
각 작업은 메인 스레드에서 실행하지 말 것 임시로 사용하고 싶다면 allowMainThreadQueries()를 이용
Comments