Android Room的简单使用

1、指定版本号,实体类,注意extend RoomDatabase

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

    public abstract UserDao userDao();

}

2、Application中初始化 allowMainThreadQueries()用于允许主线程查询

public class AppApplication extends Application {

    private AppDatabase mAppDatabase;

    @Override
    public void onCreate() {
        super.onCreate();
        mAppDatabase = Room.databaseBuilder(getApplicationContext(), AppDatabase.class, "android_room_dev.db")
                           .allowMainThreadQueries()
                           .build();
    }

    public AppDatabase getAppDatabase() {
        return mAppDatabase;
    }
    
}

3、实体类处指定 表的名称, 要有主键,非基本类型要加@TypeConverters,get,set方法为必需

@Entity(tableName = "cache_home")
public class HomeDataBean {
    @PrimaryKey(autoGenerate = true)
    private int h_id;

    @TypeConverters(BannerBeanTypeConverter.class)
    private List<BannerBean> banner;
}

4、Dao,执行数据库操作 删除全部数据也要用 @Query,@Delete可以删除单条数据

@Dao
public interface CacheDao {

    @Insert(onConflict = OnConflictStrategy.REPLACE)
    void insertCaches(HomeDataBean... homeDataBeans);

    @Query("Delete FROM cache_home")
    void deleteAll();

    @Query("SELECT * from cache_home")
    HomeDataBean[] findAll();

}

5、typeconvert类 指定自定义Bean和String的相互转换过程

public class ActivityBeanTypeConverter {
    Gson gson = new Gson();

    @TypeConverter
    public List<HomeDataBean.ActivityBean> stringToSomeObjectList(String data) {
        if (data == null) {
            return Collections.emptyList();
        }
        Type listType = new TypeToken<List<HomeDataBean.ActivityBean>>() {
        }.getType();

        return gson.fromJson(data, listType);
    }

    @TypeConverter
    public String someObjectListsToString(List<HomeDataBean.ActivityBean> someObjects) {
        return gson.toJson(someObjects);
    }
}

6、使用

mAppDatabase.dao.insert(...)

7、推荐文章

Room学习文章推荐

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章