GreenDao2.0

1.insertOrReplace 如果參數 的唯一字段的值與數據庫中某條數據一樣,那麼執行的是插入一條數據,並將原數據刪除,也就是類似於更新,但是主鍵ID變化了,並且更新沒有插入的字段都是null。

2. update(實體) ,實體必須包含主鍵,否則報錯,實體中沒有賦值的也會被更新的成了空值。

3. 這裏有時候,我們在運行MyDaoGenerator.java代碼,生成類的時候,會提示GKB代碼無法運行,這是因爲你在這個文件裏寫了中文,它不認,就算是你把這個文件轉成了utf-8,也會報這個錯,這時候,我們只能用記事本打開這個文件,然後覆蓋保存,在保存時,編碼選擇 ANSI。

4. query 的查詢 ,分頁

noteDao.queryBuilder().where(NoteDao.Properties.NoteID.eq("hlx"), NoteDao.Properties.Comment.eq(""))
        .limit(20).offset(2);

5. 一對多的寫法

Property customerId = order.addLongProperty("customerId").notNull().getProperty();
order.addToOne(customer, customerId);

ToMany customerToOrders = customer.addToMany(order, customerId);
customerToOrders.setName("orders");

6.一對多中deleteAll ,update 不會產生聯動效果,在插入n 端的時候設置setCustomer,即設置一端的值,那麼查詢的時候就可以返回一段的值

7.多對多的寫法

  1. Property studentId = stuAndteaBean.addLongProperty("studentId").getProperty();  
  2. Property teacherId = stuAndteaBean.addLongProperty("teacherId").getProperty();  
  3.   
  4. //這裏其實很簡單,就是建立兩個1:n的關係  
  5. stuAndteaBean.addToOne(studentBean,studentId).setName("onestu");  
  6. stuAndteaBean.addToOne(teacherBean,teacherId).setName("onetea");  
  7. studentBean.addToMany(stuAndteaBean,studentId).setName("manystu");  
  8. teacherBean.addToMany(stuAndteaBean,teacherId).setName("manytea");  

8. queryBuilder 多線程時使用forCurrentThread() 來避免死鎖

9.greenDao支持唯一結果和結果鏈表。如果你只想獲取唯一的結果,那麼可以使用unique(),它要麼給你唯一一個結果,要麼null,如果你不想獲得null,那麼你可以使用uniqueOrThrow(),它會在匹配結果爲空時拋出DaoException的異常。

如果你想獲取多個結果,以下有幾個方案:

list():所有結果都會載入內存,結果會死一個ArrayList。

listLazy():結果會按需載入內存,一旦其中一個元素被要求了,那麼就會載入內存並且進行chache,必須手動關閉。

還有listLazyUncached()和listIterator(),也需要手動通過調用close()來關閉。

參考:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2014/1127/2069.html

http://blog.csdn.net/chenguang79/article/details/50469138


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