引入依赖,看官网
// https://developer.android.google.cn/jetpack/androidx/releases/room?hl=zh_cn
def room_version = "2.4.3"
implementation "androidx.room:room-runtime:$room_version"
annotationProcessor "androidx.room:room-compiler:$room_version"
Entity 数据层,存储的数据,加上 @Entity 注解,加上 id,看官网
@Entity
public class Data {
@PrimaryKey(autoGenerate = true)
int id;
int val;
public Data() {
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getVal() {
return val;
}
public void setVal(int val) {
this.val = val;
}
@Override
public String toString() {
return "Data{" +
"id=" + id +
", val=" + val +
'}';
}
}
Dao 交互层,需要自己通过简单注解写实现,负责和数据库交互,加上 @Dao 注解,看官网
@Dao
public interface DataDao {
// 直接插入
@Insert
void insert(Data data);
// 查找全部
@Query("SELECT * FROM Data")
List<Data> queryAll();
}
Database 层,提供单例(官网好像没写单例),看官网
@Database(version = 1, entities = {Data.class}, exportSchema = false)
public abstract class DataDataBase extends RoomDatabase {
private static DataDataBase instance;
public abstract DataDao getDataDao();
public static DataDataBase getInstance(Context context) {
if (instance == null) {
instance = Room.databaseBuilder(context, DataDataBase.class, "data").build();
}
return instance;
}
}
Util 层,负责封装
public class DataUtil {
public static void add(Context context, Data data) {
DataDataBase.getInstance(context).getDataDao().insert(data);
}
public static List<Data> getAll(Context context) {
return DataDataBase.getInstance(context).getDataDao().queryAll();
}
}
调用,数据库属于IO,耗时操作,要放在子线程
new Thread(() -> {
Data data = new Data();
data.setVal(3);
DataUtil.add(MainActivity.this, data);
}).start();
new Thread(() -> {
List<Data> list = DataUtil.getAll(this);
for (Data data : list) {
Log.e(TAG, "onCreate: " + data);
}
}).start();