MEDIUMTEXT

Android의 room을 이용하여 sqlite 사용하기

tweak 2024. 10. 20. 18:22
반응형

안드로이드 앱에서 db를 사용할때는 sqlite를 주로 사용하는데, 이때 room을 이용하면, ORM을 사용해서 db에 접근해서 사용할 수 있다.
 
먼저 공식 문서의 링크는 아래와 같다.
https://developer.android.com/jetpack/androidx/releases/room?hl=ko

방  |  Jetpack  |  Android Developers

이 페이지는 Cloud Translation API를 통해 번역되었습니다. 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. Room Room 지속성 라이브러리는 SQLite에 추상화 레이어를

developer.android.com

 
안드로이드 앱에서 room을 사용하려면 다음과 같다.
 
첫째, 의존성을 추가한다. 현재 최신버전은 2.6.1 이다.
https://mvnrepository.com/artifact/androidx.room/room-runtime/2.6.1
https://mvnrepository.com/artifact/androidx.room/room-compiler/2.6.1

dependencies {
    runtimeOnly 'androidx.room:room-runtime:2.6.1'
    implementation 'androidx.room:room-compiler:2.6.1'
}

 
둘째, room의 구성요소는 Entity, DAO(Data Access Object), Database 가 있는데, 이 구성요소들을 구현한다.
Room 구성 요소

  • Entity: 데이터베이스 테이블을 정의하는 클래스
  • DAO (Data Access Object): 데이터베이스 접근 객체로, SQL 쿼리를 실행하는 인터페이스
  • Database: RoomDatabase를 상속받아 데이터베이스를 생성하고 DAO를 연결

Entity

Entity 는 DB의 row를 저장하기 위한 class 이다.
하나의 row를 저장할 수 있는 class이다 보니, 당연하게도 PrimaryKey가 있어야 하며, PrimaryKey를 표시 하기 위해서, @PrimaryKey 어노테이션을 사용한다.
또, entity에는 기본 생성자가 public 접근제한자로 추가되어야 한다. 그 이유는? 빌드 할때 generated 파일을 생성하는데 generated 파일에서 entity의 기본생성자를 사용한다.
 

import androidx.room.Entity;
import androidx.room.PrimaryKey;

@Entity(tableName = "user_table")
public class User {

    @PrimaryKey(autoGenerate = true)
    private long id;

    private String name;
    private int age;
    
    public User() {

    }
    
    public User(String name, int age) {
        this.name = name;
        this.age = age;
    }

    ...
    
}

 

DAO

DAO는 DB에 실제 CRUD 동작을 위한 interface를 정의 한다.
간단하게 @Insert, @Update, @Delete 를 사용할 수도 있고 @Query 를 사용하여 특정 쿼리를 수행하도록 할 수 있다.

import androidx.room.Dao;
import androidx.room.Delete;
import androidx.room.Insert;
import androidx.room.Query;
import androidx.room.Update;

import java.util.List;

@Dao
public interface UserDao {

    @Insert
    void insert(User user);

    @Query("SELECT * FROM user_table")
    List<User> getAllUsers();

    @Query("SELECT * FROM user_table WHERE id = :userId")
    User getUserById(long userId);

    @Update
    void update(User user);

    @Delete
    void delete(User user);
}

 

Database

Database는 RoomDatabase를 확장하여 데이터베이스를 정의 하며, 이 클래스는 DAO를 연결한다.

import androidx.room.Database;
import androidx.room.RoomDatabase;

@Database(entities = {User.class}, version = 1)
public abstract class AppDatabase extends RoomDatabase {
    public abstract UserDao userDao();
}

 
 
 
 

반응형