Google Architecyure Components 中Room的使用(1)

Room 是Google新推出的數(shù)據(jù)庫框架恋日,使用注解的方式簡化的數(shù)據(jù)庫的操作使用弓颈。

Room中有三個(gè)主要的組成部分

  • Entity: 與數(shù)據(jù)表對(duì)應(yīng)的實(shí)體類
  • DAO: 數(shù)據(jù)庫操作層,每一個(gè)DAO對(duì)應(yīng)一個(gè)Entity
  • Database:數(shù)據(jù)庫磷斧,使用注解的方式聲明這個(gè)數(shù)據(jù)庫中的數(shù)據(jù)表贝搁,和版本號(hào),并且包含產(chǎn)生DAO對(duì)象的方法幅垮。

簡單實(shí)例

User.java

@Entity
public class User {
    @PrimaryKey
    private int uid;

    @ColumnInfo(name = "first_name")
    private String firstName;

    @ColumnInfo(name = "last_name")
    private String lastName;

    // Getters and setters are ignored for brevity,
    // but they're required for Room to work.
}

UserDao.java

@Dao
public interface UserDao {
    @Query("SELECT * FROM user")
    List<User> getAll();

    @Query("SELECT * FROM user WHERE uid IN (:userIds)")
    List<User> 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.java

@Database(entities = {User.class}, version = 1)
public abstract class AppDatabase extends RoomDatabase {
    public abstract UserDao userDao();
}
AppDatabase db = Room.databaseBuilder(getApplicationContext(),
        AppDatabase.class, "database-name").build();

一般Database需要為單例模式

以上代碼都出自Google官方文檔

@Database注解中 exportSchema 的默認(rèn)值為true,當(dāng) exportSchema 值為true時(shí) 需要早 app.gradle 中配置 數(shù)據(jù)庫建表的SQL文件導(dǎo)出位置。導(dǎo)出的文件可用于數(shù)據(jù)庫升級(jí)測試尾组。

    javaCompileOptions {
            annotationProcessorOptions {
                arguments = ["room.schemaLocation": "$projectDir/schemas".toString()]
            }
        }

數(shù)據(jù)庫升級(jí)

數(shù)據(jù)庫辦版本升級(jí)時(shí)如果程序不做任何處理忙芒,Room框架將刪除低版本的所有數(shù)據(jù),重新創(chuàng)建數(shù)據(jù)庫讳侨。

數(shù)據(jù)庫升級(jí)的處理方法:

Room.databaseBuilder(getApplicationContext(), MyDb.class, "database-name")
        .addMigrations(MIGRATION_1_2, MIGRATION_2_3).build();

static final Migration MIGRATION_1_2 = new Migration(1, 2) {
    @Override
    public void migrate(SupportSQLiteDatabase database) {
        database.execSQL("CREATE TABLE `Fruit` (`id` INTEGER, "
                + "`name` TEXT, PRIMARY KEY(`id`))");
    }
};

static final Migration MIGRATION_2_3 = new Migration(2, 3) {
    @Override
    public void migrate(SupportSQLiteDatabase database) {
        database.execSQL("ALTER TABLE Book "
                + " ADD COLUMN pub_year INTEGER");
    }
};
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末呵萨,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子跨跨,更是在濱河造成了極大的恐慌潮峦,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,273評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異跑杭,居然都是意外死亡铆帽,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門德谅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來爹橱,“玉大人,你說我怎么就攤上這事窄做±⑶” “怎么了?”我有些...
    開封第一講書人閱讀 167,709評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵椭盏,是天一觀的道長组砚。 經(jīng)常有香客問我,道長掏颊,這世上最難降的妖魔是什么糟红? 我笑而不...
    開封第一講書人閱讀 59,520評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮乌叶,結(jié)果婚禮上盆偿,老公的妹妹穿的比我還像新娘。我一直安慰自己准浴,他們只是感情好事扭,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,515評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著乐横,像睡著了一般求橄。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上葡公,一...
    開封第一講書人閱讀 52,158評(píng)論 1 308
  • 那天罐农,我揣著相機(jī)與錄音,去河邊找鬼催什。 笑死啃匿,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蛆楞。 我是一名探鬼主播,決...
    沈念sama閱讀 40,755評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼夹厌,長吁一口氣:“原來是場噩夢啊……” “哼豹爹!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起矛纹,我...
    開封第一講書人閱讀 39,660評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤臂聋,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體孩等,經(jīng)...
    沈念sama閱讀 46,203評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡艾君,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,287評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了肄方。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片冰垄。...
    茶點(diǎn)故事閱讀 40,427評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖权她,靈堂內(nèi)的尸體忽然破棺而出虹茶,到底是詐尸還是另有隱情,我是刑警寧澤隅要,帶...
    沈念sama閱讀 36,122評(píng)論 5 349
  • 正文 年R本政府宣布蝴罪,位于F島的核電站,受9級(jí)特大地震影響步清,放射性物質(zhì)發(fā)生泄漏要门。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,801評(píng)論 3 333
  • 文/蒙蒙 一廓啊、第九天 我趴在偏房一處隱蔽的房頂上張望欢搜。 院中可真熱鬧,春花似錦崖瞭、人聲如沸狂巢。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽唧领。三九已至,卻和暖如春雌续,著一層夾襖步出監(jiān)牢的瞬間斩个,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評(píng)論 1 272
  • 我被黑心中介騙來泰國打工驯杜, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留受啥,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,808評(píng)論 3 376
  • 正文 我出身青樓鸽心,卻偏偏與公主長得像滚局,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子顽频,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,440評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容