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.多對多的寫法
- Property studentId = stuAndteaBean.addLongProperty("studentId").getProperty();
- Property teacherId = stuAndteaBean.addLongProperty("teacherId").getProperty();
- //這裏其實很簡單,就是建立兩個1:n的關係
- stuAndteaBean.addToOne(studentBean,studentId).setName("onestu");
- stuAndteaBean.addToOne(teacherBean,teacherId).setName("onetea");
- studentBean.addToMany(stuAndteaBean,studentId).setName("manystu");
- 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