Android开源:数据库ORM框架GreenDao学习(三)封装工具类使用
来源:互联网 发布:nginx 账号密码 编辑:程序博客网 时间:2024/05/23 11:15
博客转载地址:http://www.it165.net/pro/html/201401/9026.html
上一篇中讲解了基本的增删改查,本篇继续讲解 QureyBuilder 使用,及工具类封装使用
一、使用QureyBuilder
实现表的增删改查
增删改查相当方便,完全的面向对象,不需要涉及到任何的sql语言。
1.查询
范例1:查询某个表是否包含某个id:
public boolean isSaved(int ID){ QueryBuilder<SaveList> qb = saveListDao.queryBuilder(); qb.where(Properties.Id.eq(ID)); qb.buildCount().count(); return qb.buildCount().count() > 0 ? true : false;}
范例2:获取整个表的数据集合,一句代码就搞定!
public List<PhotoGalleryDB> getPhotoGallery(){ return photoGalleryDao.loadAll();// 获取图片相册}
范例3:通过一个字段值查找对应的另一个字段值(为简便直接使用下面方法,也许有更简单的方法,尚未尝试)
/** 通过图片id查找其目录id */public int getTypeId(int picId){ QueryBuilder<PhotoGalleryDB> qb = photoGalleryDao.queryBuilder(); qb.where(Properties.Id.eq(picId)); if (qb.list().size() > 0) { return qb.list().get(0).getTypeId(); }else{ return -1; }}
范例4:查找所有第一姓名是“Joe”并且以lastname排序。
List joes = userDao.queryBuilder() where(Properties.FirstName.eq("Joe")) orderAsc(Properties.LastName) list();
范例5:多重条件查询
(1)获取id为cityId并且infotype为HBContant.CITYINFO_SL的数据集合:
public List<CityInfoDB> getSupportingList(int cityId){ QueryBuilder<CityInfoDB> qb = cityInfoDao.queryBuilder(); qb.where(qb.and(Properties.CityId.eq(cityId),Properties.InfoType.eq(HBContant.CITYINFO_SL))); qb.orderAsc(Properties.Id);// 排序依据 return qb.list();}
(2)获取firstname为“Joe”并且出生于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();
范例6:获取某列对象
picJsonDao.loadByRowId(picId);
2.增添/插入、修改
插入数据更加简单,也是只要一句代码便能搞定!
public void addToPhotoTable(Photo p){ photoDao.insert(p);}
插入时需要new一个新的对象,范例如下:
DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, "notes-db", null); db = helper.getWritableDatabase(); daoMaster = new DaoMaster(db); daoSession = daoMaster.newSession(); noteDao = daoSession.getNoteDao(); Note note = new Note(null, noteText, comment, new Date()); noteDao.insert(note);
修改更新:
photoDao.insertOrReplace(photo);photoDao.insertInTx(photo);
3.删除:
(1)清空表格数据
/** 清空相册图片列表的数据 */public void clearPhoto(){ photoDao.deleteAll();}
(2)删除某个对象
public void deleteCityInfo(int cityId){ QueryBuilder<DBCityInfo> qb = cityInfoDao.queryBuilder(); DeleteQuery<DBCityInfo> bd = qb.where(Properties.CityId.eq(cityId)).buildDelete(); bd.executeDeleteWithoutDetachingEntities();}
参考:https://github.com/greenrobot/greenDAO/issues/34
由上可见,使用greenDAO进行数据库的增删改查时及其方便,而且性能极佳。
(三)常用方法笔记
1.在Application实现得到DaoMaster和DaoSession的方法:
private static DaoMaster daoMaster;private static DaoSession daoSession;/*** 取得DaoMaster** @param context* @return*/public static DaoMaster getDaoMaster(Context context){ if (daoMaster == null){ OpenHelper helper = new DaoMaster.DevOpenHelper(context, ontant.DATABASE_NAME, null); daoMaster = new DaoMaster(helper.getWritableDatabase()); } return daoMaster;} /*** 取得DaoSession** @param context* @return*/public static DaoSession getDaoSession(Context context){ if (daoSession == null){ if (daoMaster == null){ daoMaster = getDaoMaster(context); } daoSession = daoMaster.newSession(); } return daoSession;}
2.增删改查工具类:
public class DBHelper{private static Context mContext;private static DBHelper instance; private CityInfoDBDao cityInfoDao; private DBHelper(){} public static DBHelper getInstance(Context context){ if (instance == null){ instance = new DBHelper(); if (mContext == null){ mContext = context; } // 数据库对象 DaoSession daoSession = HBApplication.getDaoSession(mContext); instance.cityInfoDao = daoSession.getCityInfoDBDao(); } return instance;} /** 添加数据 */public void addToCityInfoTable(CityInfo item){ cityInfoDao.insert(item);} /** 查询 */public List<EstateLoveListJson> getCityInfoList(){ QueryBuilder<CityInfo> qb = cityInfoDao.queryBuilder(); return qb.list();} /** 查询 */public List<CityInfo> getCityInfo(){ return cityInfoDao.loadAll();// 查找图片相册} /** 查询 */public boolean isSaved(int Id){ QueryBuilder<CityInfo> qb = cityInfoDao.queryBuilder(); qb.where(Properties.Id.eq(Id)); qb.buildCount().count(); return qb.buildCount().count() > 0 ? true : false;// 查找收藏表} /** 删除 */public void deleteCityInfoList(int Id){ QueryBuilder<CityInfo> qb = cityInfoDao.queryBuilder(); DeleteQuery<CityInfo> bd = where(Properties.Id.eq(Id)).buildDelete(); bd.executeDeleteWithoutDetachingEntities();} /** 删除 */public void clearCityInfo(){ cityInfoDao.deleteAll();} /** 通过城市id查找其类型id */public int getTypeId(int cityId){ QueryBuilder<CityInfo> qb = cityInfoDao.queryBuilder(); qb.where(Properties.Id.eq(cityId)); if (qb.list().size() > 0){ return qb.list().get(0).getTypeId(); }else{ return 0; }} /** 多重查询 */public List<CityInfo> getIphRegionList(int cityId){ QueryBuilder<CityInfoDB> qb = cityInfoDao.queryBuilder(); qb.where(qb.and(Properties.CityId.eq(cityId), perties.InfoType.eq(HBContant.CITYINFO_IR))); qb.orderAsc(Properties.Id);// 排序依据 return qb.list(); }}
另外,还有多表关联、惰性加载等功能,待后续研究。
参考资料:
1.https://github.com/greenrobot/greenDAO
2.http://greendao-orm.com/documentation/how-to-get-started/
3.http://blog.csdn.net/krislight/article/details/9391455
- Android开源:数据库ORM框架GreenDao学习(三)封装工具类使用
- Android开源:数据库ORM框架GreenDao封装工具类使用
- Android开源:数据库ORM框架GreenDao学习(一)基础使用篇
- Android ORM数据库框架之-greenDao(三)
- Android数据库工具ORM-greenDAO学习
- android高效ORM数据库框架greenDao使用
- Android开源:数据库ORM框架GreenDao学习心得及使用总结
- Android开源:数据库ORM框架GreenDao学习心得及使用总结
- Android开源:数据库ORM框架GreenDao学习心得及使用总结
- Android开源:数据库ORM框架GreenDao学习心得及使用总结
- Android开源:数据库ORM框架GreenDao学习心得及使用总结
- Android开源:数据库ORM框架GreenDao学习心得及使用总结
- Android开源:数据库ORM框架GreenDao学习心得及使用总结
- Android开源:数据库ORM框架GreenDao学习心得及使用总结
- Android开源:数据库ORM框架GreenDao学习心得及使用总结
- Android开源:数据库ORM框架GreenDao学习心得及使用总结
- Android开源:数据库ORM框架GreenDao学习心得及使用总结
- Android开源:数据库ORM框架GreenDao学习(二)数据库查询篇
- stdio.h 部分成员函数介绍
- easyUI 获取记录数 页数 当前页
- Android面试后感
- 使用MongoDB.NET 2.2.4驱动版本对 Mongodb3.3数据库中GridFS增删改查
- HDU 3038 How Many Answers Are Wrong (并查集好题)(带权并查集)
- Android开源:数据库ORM框架GreenDao学习(三)封装工具类使用
- ARM交叉编译工具arm-linux-gcc安装
- webservice笔记
- 还可以使用OpenMP
- iOS里的JSON转换
- 优化Android Studio/Gradle构建
- webStorm的project问题?
- 转发和重定向的区别
- HDOJ 2069 Coin Change 带限制条件的母函数