Android开源:数据库ORM框架GreenDao封装工具类使用

博客转载地址:http://www.it165.net/pro/html/201401/9026.html
        上一篇中讲解了基本的增删改查,本篇继续讲解 QureyBuilder 使用,及工具类封装使用

  一、使用QureyBuilder实现表的增删改查

   增删改查相当方便,完全的面向对象,不需要涉及到任何的sql语言。


  1.查询

范例1:查询某个表是否包含某个id:

 

[java]  view plain  copy
  1. public boolean isSaved(int ID){  
  2.   
  3.   QueryBuilder qb = saveListDao.queryBuilder();  
  4.    qb.where(Properties.Id.eq(ID));  
  5.    qb.buildCount().count();  
  6.    return qb.buildCount().count() > 0 ? true : false;  
  7. }  


范例2:获取整个表的数据集合,一句代码就搞定!

 

public List getPhotoGallery()
{
    return photoGalleryDao.loadAll();// 获取图片相册
}

 

范例3:通过一个字段值查找对应的另一个字段值(为简便直接使用下面方法,也许有更简单的方法,尚未尝试)

[html]  view plain  copy
  1.    
  2. /** 通过图片id查找其目录id */  
  3. public int getTypeId(int picId)  
  4. {  
  5.    QueryBuilder<PhotoGalleryDB> qb = photoGalleryDao.queryBuilder();  
  6.    qb.where(Properties.Id.eq(picId));  
  7.    if (qb.list().size() > 0)  
  8.    {  
  9.       return qb.list().get(0).getTypeId();  
  10.    }else{  
  11.       return -1;  
  12.    }  
  13. }  


 

范例4:查找所有第一姓名是“Joe”并且以lastname排序。

 

[html]  view plain  copy
  1. List joes = userDao.queryBuilder()  
  2. where(Properties.FirstName.eq("Joe"))  
  3. orderAsc(Properties.LastName)  
  4. list();  


范例5:多重条件查询

(1)获取id为cityId并且infotype为HBContant.CITYINFO_SL的数据集合:

[java]  view plain  copy
  1. public List getSupportingList(int cityId){  
  2.    QueryBuilder qb = cityInfoDao.queryBuilder();  
  3.    qb.where(qb.and(Properties.CityId.eq(cityId),Properties.InfoType.eq(HBContant.CITYINFO_SL)));  
  4.    qb.orderAsc(Properties.Id);// 排序依据  
  5.    return qb.list();  
  6. }  

 

(2)获取firstname为“Joe”并且出生于1970年10月以后的所有user集合:

 

[java]  view plain  copy
  1. QueryBuilder qb = userDao.queryBuilder();  
  2. qb.where(Properties.FirstName.eq("Joe"),  
  3. qb.or(Properties.YearOfBirth.gt(1970),  
  4. qb.and(Properties.YearOfBirth.eq(1970), Properties.MonthOfBirth.ge(10))));  
  5. List youngJoes = qb.list();  


 

范例6:获取某列对象

[java]  view plain  copy
  1. picJsonDao.loadByRowId(picId);  


 

 

2.增添/插入、修改

插入数据更加简单,也是只要一句代码便能搞定!

 

[html]  view plain  copy
  1.    
  2. public void addToPhotoTable(Photo p){  
  3.  photoDao.insert(p);  
  4. }  


 

插入时需要new一个新的对象,范例如下:

 

[java]  view plain  copy
  1. DevOpenHelper helper = new DaoMaster.DevOpenHelper(this"notes-db"null);  
  2. db = helper.getWritableDatabase();  
  3. daoMaster = new DaoMaster(db);  
  4. daoSession = daoMaster.newSession();  
  5. noteDao = daoSession.getNoteDao();  
  6. Note note = new Note(null, noteText, comment, new Date());  
  7. noteDao.insert(note);  


 

修改更新:

[java]  view plain  copy
  1. photoDao.insertOrReplace(photo);  
  2.   
  3. photoDao.insertInTx(photo);  


 

3.删除:

(1)清空表格数据

 

[java]  view plain  copy
  1. /** 清空相册图片列表的数据 */  
  2. public void clearPhoto(){  
  3.   
  4.  photoDao.deleteAll();  
  5.   
  6. }  


 

(2)删除某个对象

[java]  view plain  copy
  1. public void deleteCityInfo(int cityId){  
  2.   
  3.   QueryBuilder qb = cityInfoDao.queryBuilder();  
  4.   DeleteQuery bd = qb.where(Properties.CityId.eq(cityId)).buildDelete();  
  5.   bd.executeDeleteWithoutDetachingEntities();  
  6. }  


 

参考:https://github.com/greenrobot/greenDAO/issues/34

 

由上可见,使用greenDAO进行数据库的增删改查时及其方便,而且性能极佳。

 

(三)常用方法笔记

1.在Application实现得到DaoMaster和DaoSession的方法:

 

[java]  view plain  copy
  1. private static DaoMaster daoMaster;  
  2. private static DaoSession daoSession;  
  3.   
  4. /** 
  5. * 取得DaoMaster 
  6. * 
  7. * @param context 
  8. * @return 
  9. */  
  10. public static DaoMaster getDaoMaster(Context context)  
  11. {  
  12.    if (daoMaster == null){  
  13.      OpenHelper helper = new DaoMaster.DevOpenHelper(context, ontant.DATABASE_NAME, null);  
  14.      daoMaster = new DaoMaster(helper.getWritableDatabase());  
  15.    }  
  16.    return daoMaster;  
  17. }  
  18.   
  19.  /** 
  20. * 取得DaoSession 
  21. * 
  22. * @param context 
  23. * @return 
  24. */  
  25. public static DaoSession getDaoSession(Context context){  
  26.    if (daoSession == null){  
  27.      if (daoMaster == null){  
  28.         daoMaster = getDaoMaster(context);  
  29.       }  
  30.      daoSession = daoMaster.newSession();  
  31.    }  
  32.      return daoSession;  
  33. }  
  34.   
  35.    


 

2.增删改查工具类:

[java]  view plain  copy
  1. public class DBHelper{  
  2.   
  3. private static Context mContext;  
  4. private static DBHelper instance;  
  5.    
  6. private CityInfoDBDao cityInfoDao;  
  7.    
  8. private DBHelper(){  
  9.   
  10. }  
  11.    
  12. public static DBHelper getInstance(Context context){  
  13.     if (instance == null){  
  14.         instance = new DBHelper();  
  15.     if (mContext == null){  
  16.         mContext = context;  
  17.     }  
  18.    
  19.        // 数据库对象  
  20.        DaoSession daoSession = HBApplication.getDaoSession(mContext);  
  21.        instance.cityInfoDao = daoSession.getCityInfoDBDao();  
  22.    }  
  23.     return instance;  
  24. }  
  25.    
  26. /** 添加数据 */  
  27. public void addToCityInfoTable(CityInfo item){  
  28.    cityInfoDao.insert(item);  
  29. }  
  30.    
  31.   
  32. /** 查询 */  
  33. public List getCityInfoList(){  
  34.    
  35.    QueryBuilder qb = cityInfoDao.queryBuilder();  
  36.   
  37.    return qb.list();  
  38. }  
  39.    
  40. /** 查询 */  
  41. public List getCityInfo(){  
  42.   
  43.    return cityInfoDao.loadAll();// 查找图片相册  
  44. }  
  45.    
  46. /** 查询 */  
  47. public boolean isSaved(int Id){  
  48.   
  49.    QueryBuilder qb = cityInfoDao.queryBuilder();  
  50.    qb.where(Properties.Id.eq(Id));  
  51.    qb.buildCount().count();  
  52.    return qb.buildCount().count() > 0 ? true : false;// 查找收藏表  
  53. }  
  54.    
  55. /** 删除 */  
  56. public void deleteCityInfoList(int Id){  
  57.   QueryBuilder qb = cityInfoDao.queryBuilder();  
  58.    DeleteQuery bd = where(Properties.Id.eq(Id)).buildDelete();  
  59.    bd.executeDeleteWithoutDetachingEntities();  
  60. }  
  61.    
  62. /** 删除 */  
  63. public void clearCityInfo(){  
  64.   cityInfoDao.deleteAll();  
  65. }  
  66.    
  67. /** 通过城市id查找其类型id */  
  68. public int getTypeId(int cityId){  
  69.   QueryBuilder qb = cityInfoDao.queryBuilder();  
  70.    qb.where(Properties.Id.eq(cityId));  
  71.    if (qb.list().size() > 0){  
  72.      return qb.list().get(0).getTypeId();  
  73.    }else{  
  74.      return 0;  
  75.    }  
  76. }  
  77.    
  78. /** 多重查询 */  
  79. public List getIphRegionList(int cityId){  
  80.   
  81.   QueryBuilder qb = cityInfoDao.queryBuilder();  
  82.    qb.where(qb.and(Properties.CityId.eq(cityId), perties.InfoType.eq(HBContant.CITYINFO_IR)));  
  83.    qb.orderAsc(Properties.Id);// 排序依据  
  84.    return qb.list();  
  85.    }  
  86. }  



另外,还有多表关联、惰性加载等功能,待后续研究。

参考资料:

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开发,Java)