greenDao的對于表的操作總結(jié):(需要將App卸載重裝诱建,才能走建表語句)
1筒捺、一般要寫一個(gè)DaoUtil,用于獲取對表操作的對象: 在DaoUtil中主要代碼:
DaoMaster.OpenHelper helper = new ......
DaoMaster daoMaster = new DaoMaster(helper.getWritableDatabase());
2酪我、在使用的時(shí)候是先得到一個(gè)daoSession對象棕洋,再進(jìn)行對于數(shù)據(jù)庫中表的操作: DaoSession daoSession = DaoUtil.getDaoSession(context);
3椅挣、對表進(jìn)行執(zhí)行增刪改查:
增加:
①.例如增加:(insertOrReplaceInTx):使用事務(wù)操作晴裹,將給定的實(shí)體集合插入數(shù)據(jù)庫被济,所此實(shí)體存在,則覆蓋:
daoSession.getNotifyEntityDao().insertOrReplaceInTx(mUnreadNoticeList);
②insertInTx:將給定的實(shí)體插入數(shù)據(jù)庫
③insertorReplace(T entity):將給定的實(shí)體插入數(shù)據(jù)庫涧团,若此實(shí)體類存在只磷,則覆蓋。
④save(T entity):將給定的實(shí)體插入數(shù)據(jù)庫泌绣,若實(shí)體存在钮追,則更新。
刪除:
delete(T entity):從數(shù)據(jù)庫中刪除給定的實(shí)體
deleteAll() :刪除數(shù)據(jù)庫中全部數(shù)據(jù)
deleteByKey(K key):從數(shù)據(jù)庫中刪除給定Key所對應(yīng)的實(shí)體
deleteByKeyInTx(java.lang.Iterable<K> keys):使用事務(wù)操作刪除數(shù)據(jù)庫中給定的所有key所對應(yīng)的實(shí)體
deleteByKeyInTx(K... keys):使用事務(wù)操作刪除數(shù)據(jù)庫中給定的所有key所對應(yīng)的實(shí)體
deleteInTx(java.lang.Iterable<T> entities):使用事務(wù)操作刪除數(shù)據(jù)庫中給定實(shí)體集合中的實(shí)體
deleteInTx(T... entities):使用事務(wù)操作刪除數(shù)據(jù)庫中給定的實(shí)體
修改:
update(T entity) :更新給定的實(shí)體
updateInsideSynchronized(T entity, DatabaseStatement stmt, boolean lock)
updateInsideSynchronized(T entity, android.database.sqlite.SQLiteStatement stmt, boolean lock)
updateInTx(java.lang.Iterable<T> entities) :使用事務(wù)操作阿迈,更新給定的實(shí)體
updateInTx(T... entities):使用事務(wù)操作元媚,更新給定的實(shí)體
查詢:使用QueryBuilder自定義查詢實(shí)體,而不是再寫繁瑣的SQL語句苗沧,避免SQL語句出錯(cuò)率刊棕。
官方給的查詢例子:
①List joes = userDao.queryBuilder()
// 查詢的條件
.where(Properties.FirstName.eq("Joe"))
// 返回實(shí)體集合升序排列
.orderAsc(Properties.LastName)
.list();
②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();
③其他為分頁等不方便而存在的api:
limit(int):限制查詢返回結(jié)果的數(shù)目
offset(int):設(shè)置查詢結(jié)果的偏移量,此查詢需與limit(int)結(jié)合使用待逞,而不能夠脫離limit(int)單獨(dú)使用
④如果查詢的結(jié)果是多個(gè)(返回的結(jié)果是一個(gè)集合等)
list():所有實(shí)體加載至內(nèi)存甥角,結(jié)果通常是一個(gè)ArrayList
listLazy():實(shí)體在需要時(shí),加載至內(nèi)存识樱,表中的第一個(gè)元素被第一次訪問時(shí)會(huì)被緩存嗤无,下次訪問時(shí),使用緩存
listLazyUncached():任何對列表實(shí)體的訪問懂事從數(shù)據(jù)庫中加載
listIterator():以按需加載的方式來遍歷結(jié)果怜庸,數(shù)據(jù)沒有被緩存
List<NotifyEntity> mUnreadNoticeListFromDB = daoSession.getNotifyEntityDao().queryBuilder().list();