天天看點

開源 android room,Android 資料存儲 Room

本來想查一下Android最新的資料存儲知識,意外發現:官方推薦使用Room代替SQLite,那就學習一下把。

Room由三部分組成

Database

Entity

DAO

開源 android room,Android 資料存儲 Room

安裝

詳見這裡

Database

@Database(entities = {User.class}, version = 1)

public abstract class AppDatabase extends RoomDatabase {

public abstract UserDao userDao();

}

Entity

@Entity

public class User {

@PrimaryKey

public int uid;

@ColumnInfo(name = "first_name")

public String firstName;

@ColumnInfo(name = "last_name")

public String lastName;

}

DAO

@Dao

public interface UserDao {

@Query("SELECT * FROM user")

List getAll();

@Query("SELECT * FROM user WHERE uid IN (:userIds)")

List 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);

}

使用

AppDatabase db = Room.databaseBuilder(getApplicationContext(),

AppDatabase.class, "database-name").build();

下面是官方提到的注意事項:

Note: If your app runs in a single process, you should follow the singleton design pattern when instantiating an AppDatabase object. Each RoomDatabase instance is fairly expensive, and you rarely need access to multiple instances within a single process.

If your app runs in multiple processes, include enableMultiInstanceInvalidation() in your database builder invocation. That way, when you have an instance of AppDatabase in each process, you can invalidate the shared database file in one process, and this invalidation automatically propagates to the instances of AppDatabase within other processes.

參考文獻: