greenDAO開(kāi)源框架學(xué)習(xí)--之使用

  • 實(shí)體模型化

生成DAO之前的設(shè)置:

//創(chuàng)建圖表對(duì)象
Schema schema=new Schema(1,"de.greenrobot.daoexample");
//給圖表對(duì)象添加實(shí)體
Entity user=schema.addEntity("User);
//一些基本設(shè)置,并且給實(shí)體添加屬性
user.addIdProperty();
user.addStringProperty("name");
user.addStringProperty("password");
user.addStringProperty("yearOfBirth");

Tips:默認(rèn)的數(shù)據(jù)庫(kù)名稱(chēng)以大寫(xiě)使用下劃線(xiàn)分隔單詞。例如,一個(gè)名為“創(chuàng)建日期”將成為一個(gè)數(shù)據(jù)庫(kù)列“CREATION_DATE”

  • 核心類(lèi)

1.DaoMaster:它有靜態(tài)方法來(lái)創(chuàng)建表或刪除它們。它的內(nèi)部類(lèi)openhelper和devopenhelper是SQLiteOpenHelper實(shí)現(xiàn)創(chuàng)建SQLite數(shù)據(jù)庫(kù)的模式。

2.DaoSession:
可以使用一個(gè)getter方法,管理一個(gè)特定模式的所有可用的DAO對(duì)象.DaoSession還為實(shí)體提供了一些通用的持久性方法如插入、更新和刪除,刷新加載。

3.DAOs:數(shù)據(jù)訪(fǎng)問(wèn)對(duì)象(DAO)和查詢(xún)實(shí)體.對(duì)每一個(gè)實(shí)體,greenDAO生成一個(gè)DAO.它有許多比DaoSession更持久化的方法。例如:計(jì)數(shù),loadAll,和insertinTx.

4.Entities:持久的對(duì)象.你不得不生成實(shí)體類(lèi),并使用標(biāo)準(zhǔn)java屬性代表一個(gè)數(shù)據(jù)庫(kù)對(duì)象(如一個(gè)POJO行或JavaBean)。


  • 創(chuàng)建數(shù)據(jù)庫(kù)(在A(yíng)ndroid工程中)
    下面的代碼示例闡釋了初始化數(shù)據(jù)庫(kù)和核心greendao類(lèi)的第一步:
    helper = new DaoMaster.DevOpenHelper( this, "notes-db", null);
    db = helper.getWritableDatabase();
    daoMaster = new DaoMaster(db);
    daoSession = daoMaster.newSession();
    noteDao = daoSession.getNoteDao();

注意,數(shù)據(jù)庫(kù)連接屬于daomaster,所以多個(gè)會(huì)話(huà)指的是同一個(gè)數(shù)據(jù)庫(kù)連接。新的會(huì)話(huà)可以很快地創(chuàng)建。然而,每個(gè)會(huì)話(huà)分配內(nèi)存,通常是一個(gè)會(huì)話(huà)“緩存”的實(shí)體。(這也是greenDAO快的一個(gè)原因,詳見(jiàn)官網(wǎng))

  • QuesryBuilder 查詢(xún)
    這是官方推薦的查詢(xún)類(lèi),可以使用SQL語(yǔ)句,也可以使用封裝好的方法。
    例1: Query for all users with the first name “Joe” ordered by their last name.
    List joes = userDao.queryBuilder()Qu
    .where(Properties.FirstName.eq("Joe"))
    .orderAsc(Properties.LastName)
    .list();
    例2:查詢(xún)一個(gè)FisrstName=="Joe",并且出生日大于1970或者出生日等于1970并且月份大于10的User
    QueryBuilder qb = userDao.queryBuilder();
    qb.where(Properties.FirstName.eq("Joe"),
    qb.or(Properties.YearOfBirth.gt(1970),
    qb.and(Properties.YearOfBirth.eq(1970),
    Properties.MonthOfBirth.ge(10))));
    List youngJoes = qb.list();
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容