一、概述
Room
是对SQLite
数据库的抽象,它提供了很多便利的API和注解等,让使用者对数据库的访问更加方便,同时可以减少很多的模板代码。另外 Room
提供的单元测试相关方法,本文也会着重介绍一下。
二、基本用法
1.主要组件
DataBase:实际数据库的访问入口
@Database(
entities = {
User.class
},
version = 1)
public abstract class AppDatabase extends RoomDatabase {
//用变量,避免不同分支同时升级数据库导致出错
public static class DatabaseVersion {
public static final int VERSION_1 = 1;
public static final int VERSION_2 = 2;
}
public abstract UserDao getUerDao();
}
Entity:数据库里的表,用@Entity
注解标注一个数据类,就可以把它变成一个表
@Entity
public class User {
@PrimaryKey
@NonNull
private String id;
@ColumnInfo
private String name;
public User(@NonNull String id, String name) {
this.id = id;
this.name = name;
}
public String getId() {
return id;
}
public String getName() {
return name;
}
}
DAO:数据库访问者,用@Dao
注解标注接口,配合 sql 相关的注解,在编译时,Room会自动实现这个接口,并生成相应的代码
@Dao
public interface UserDao {
// 如果已有同样主键的记录,则替换
@Insert(onConflict = OnConflictStrategy.REPLACE)
void insertUserRecord(User user);
@Query("select *from User where id = (:id)")
User geUerById(String id);
}
2.使用方法
一般通过构造一个Database的单例出来使用,构造的时候可以配置升级的方案等。
public class AppDatabaseFactory {
public static final String DATABASE_NAME = "My_Database";
private static volatile AppDatabase sInstance;
private AppDatabaseFactory() {
}
public static AppDatabase create(Context context) {
if (sInstance == null) {
synchronized<