GreenDao 使用二

1.创建一个实体类


1

Entity note = schema.addEntity("Note");

默认表名就是类名,也可以自定义表名

1.dao.setTableName("NoteList");

greenDAO会自动根据实体类属性创建表字段,并赋予默认值。例如在数据库方面的表名和列名都来源于实体类名和属性名。默认的数据库名称是大写使用下划线分隔单词,而不是在Java中使用的驼峰式大小写风格。例如,一个名为“CREATIONDATE”属性将成为一个数据库列“CREATION_DATE”。

设置一个自增长ID列为主键:

1.dao.addIdProperty().primaryKey().autoincrement();

设置其他各种类型的属性:


1

2

3

dao.addIntProperty("cityId");

dao.addStringProperty("infoType").notNull();//非null字段

dao.addDoubleProperty("Id");

在生成的实体类中,int类型为自动转为long类型。

如果在编译过程中出现以下错误,那么有可能是主键的类型错误所致:

1.java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String

在使用greenDAO时,一个实体类只能对应一个表,目前没法做到一个表对应多个实体类,或者多个表共用一种对象类型。后续的升级也不会针对这一点进行扩展。

(二)表的增删改查

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

1.查询

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

1.public boolean isSaved(int ID)

2.{

3.QueryBuilder<SaveList> qb = saveListDao.queryBuilder();

4.qb.where(Properties.Id.eq(ID));

5.qb.buildCount().count();

6.return qb.buildCount().count() > 0 true false;

7.}

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


1

2

3

4

public List<PhotoGalleryDB> getPhotoGallery()

{

    return photoGalleryDao.loadAll();// 获取图片相册

}

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

01./** 通过图片id查找其目录id */

02.public int getTypeId(int picId)

03.{

04.QueryBuilder<PhotoGalleryDB> qb = photoGalleryDao.queryBuilder();

05.qb.where(Properties.Id.eq(picId));

06.if (qb.list().size() > 0)

07.{

08.return qb.list().get(0).getTypeId();

09.}

10.else

11.{

12.return -1;

13.}

14.}

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

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的数据集合:

1.public List<CityInfoDB> getSupportingList(int cityId)

2.{

3.QueryBuilder<CityInfoDB> qb = cityInfoDao.queryBuilder();

4.qb.where(qb.and(Properties.CityId.eq(cityId),Properties.InfoType.eq(HBContant.CITYINFO_SL)));

5.qb.orderAsc(Properties.Id);// 排序依据

6.return qb.list();

7.}

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

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:获取某列对象

1.picJsonDao.loadByRowId(picId);

2.增添/插入、修改

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

1.public void addToPhotoTable(Photo p)

2.{

3.photoDao.insert(p);

4.}

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

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);

修改更新:

1.photoDao.insertOrReplace(photo);

2.photoDao.insertInTx(photo);

3.删除:

(1)清空表格数据

1./** 清空相册图片列表的数据 */

2.public void clearPhoto()

3.{

4.photoDao.deleteAll();

5.}

(2)删除某个对象

1.public void deleteCityInfo(int cityId)

2.{

3.QueryBuilder<DBCityInfo> qb = cityInfoDao.queryBuilder();

4.DeleteQuery<DBCityInfo> bd = qb.where(Properties.CityId.eq(cityId)).buildDelete();

5.bd.executeDeleteWithoutDetachingEntities();

6.}

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

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

(三)常用方法笔记

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

01.private static DaoMaster daoMaster;

02.private static DaoSession daoSession;

03./**

04.* 取得DaoMaster

05.*

06.* @param context

07.* @return

08.*/

09.public static DaoMaster getDaoMaster(Context context)

10.{

11.if (daoMaster == null)

12.{

13.OpenHelper helper = new DaoMaster.DevOpenHelper(context, HBContant.DATABASE_NAME, null);

14.daoMaster = new DaoMaster(helper.getWritableDatabase());

15.}

16.return daoMaster;

17.}

18./**

19.* 取得DaoSession

20.*

21.* @param context

22.* @return

23.*/

24.public static DaoSession getDaoSession(Context context)

25.{

26.if (daoSession == null)

27.{

28.if (daoMaster == null)

29.{

30.daoMaster = getDaoMaster(context);

31.}

32.daoSession = daoMaster.newSession();

33.}

34.return daoSession;

35.}

2.增删改查工具类:

01.public class DBHelper

02.{

03.private static Context mContext;

04.private static DBHelper instance;

05.

06.private CityInfoDBDao cityInfoDao;

07.

08.private DBHelper()

09.{

10.}

11.

12.public static DBHelper getInstance(Context context)

13.{

14.if (instance == null)

15.{

16.instance = new DBHelper();

17.if (mContext == null)

18.{

19.mContext = context;

20.}

21.

22.// 数据库对象

23.DaoSession daoSession = HBApplication.getDaoSession(mContext);

24.instance.cityInfoDao = daoSession.getCityInfoDBDao();

25.}

26.return instance;

27.}

28.

29./** 添加数据 */

30.public void addToCityInfoTable(CityInfo item)

31.{

32.cityInfoDao.insert(item);

33.}

34.

35./** 查询 */

36.public List<EstateLoveListJson> getCityInfoList()

37.{

38.QueryBuilder<CityInfo> qb = cityInfoDao.queryBuilder();

39.return qb.list();

40.}

41.

42./** 查询 */

43.public List<CityInfo> getCityInfo()

44.{

45.return cityInfoDao.loadAll();// 查找图片相册

46.}

47.

48./** 查询 */

49.public boolean isSaved(int Id)

50.{

51.QueryBuilder<CityInfo> qb = cityInfoDao.queryBuilder();

52.qb.where(Properties.Id.eq(Id));

53.qb.buildCount().count();

54.return qb.buildCount().count() > 0 true false;// 查找收藏表

55.}

56.

57./** 删除 */

58.public void deleteCityInfoList(int Id)

59.{

60.QueryBuilder<CityInfo> qb = cityInfoDao.queryBuilder();

61.DeleteQuery<CityInfo> bd = qb.where(Properties.Id.eq(Id)).buildDelete();

62.bd.executeDeleteWithoutDetachingEntities();

63.}

64.

65./** 删除 */

66.public void clearCityInfo()

67.{

68.cityInfoDao.deleteAll();

69.}

70.

71./** 通过城市id查找其类型id */

72.public int getTypeId(int cityId)

73.{

74.QueryBuilder<CityInfo> qb = cityInfoDao.queryBuilder();

75.qb.where(Properties.Id.eq(cityId));

76.if (qb.list().size() > 0)

77.{

78.return qb.list().get(0).getTypeId();

79.}

80.else

81.{

82.return 0;

83.}

84.}

85.

86./** 多重查询 */

87.public List<CityInfo> getIphRegionList(int cityId)

88.{

89.QueryBuilder<CityInfoDB> qb = cityInfoDao.queryBuilder();

90.qb.where(qb.and(Properties.CityId.eq(cityId), Properties.InfoType.eq(HBContant.CITYINFO_IR)));

91.qb.orderAsc(Properties.Id);// 排序依据

92.return qb.list();

93.}

94.}

时间: 2024-10-12 00:56:46

GreenDao 使用二的相关文章

[Android]GreenDao(二)——使用

上一篇讲了GreenDao的配置,本篇着重于API的各种使用,并附上Demo. 类的关系 大家还记得上一篇讲到的代码自动生成的四个类,DaoMaster,DaoSession,Dao,User,排除最后一个User实体类不说,其他三个的关系应该是非常明确的. 从图上看出,得到User对象的步骤.其中还有些细节需要说明. 获取DaoMaster 用过数据库的程序圆都清楚,我们需要DaoSession对象来进行对数据库的增删改查. 从DaoMaster中有newSession()的方法可以帮我们实现

android_orm框架之greenDAO(二)

一.概述 在上次greenDao第一篇文章中,我们对greenDao的使用步骤和基本用法给大家做了介绍,文章链接:http://www.cnblogs.com/jerehedu/p/4304766.html 现在将继续深入学习greenDAO.数据查询展示是应用中最常用的功能之一,greenDAO为我们提供了强大的查询支持,并且采用完全面向对象的方式,即使一点都不懂SQL也没有问题. 二.功能实现 首先按照上文所述过程生成java实体类和dao类,并插入测试数据,主要代码如下: 生成器代码: p

GreenDao开源ORM框架浅析

Android程序开发中,避免不了要用到数据库,我们都知道android提供了内置的Sqlite,即调用SQLiteOpenHelper的方法,来操作数据库,但是使用过程较为繁琐,从建表到对表中数据的正删改查操作,需要大量的代码来建立表,和完成这些操作. GreenDao居然是ORM框架,它跟hibernate是很像的,就是当你配置了一些参数信息之后,可以由框架来帮你生成对应的实体类,还有生成对应的操作实体类的代码(自动建表和基本的增删改查). 优点: 1.最大性能(最快的Android ORM

Android 配置使用 GreenDao 教程

?GreenDao介绍 android开发的本地数据库存储是sqlite.greenDAO应该算是当前最火的数据库开源框架了吧,它是一个移动开发的ORM(object / relational mapping)框架,是对sqlite数据库访问的对象化封装.以对象的形式去访问数据库,数据库表里面的字段就相当于对象的属性了.可以直接obj.data的形式访问了.如果觉得效率不够高,你也可以自己ORM的框架.据我所致GreeDao是android开发性能最好的数据库开源框架. 总之,一句话,green

《Andorid开源》greenDao 数据库orm框架

一 前言:以前没用框架写Andorid的Sqlite的时候就是用SQLiteDatabase ,SQLiteOpenHelper ,SQL语句等一些东西,特别在写SQL语句来进行 数据库操作的时候是一件很繁琐的事情,有时候没有错误提示的,很难找到错误的地方,即费力又花时间. 现在使用greenDao就可以避免那些繁琐的SQL文了,极大的简化了对Sqlite的操作. greenDao官方网址是:http://greendao-orm.com/ greenDao官方demo下载地址:https://

android高效ORM数据库框架greenDao使用

     因为项目中多处用到了数据库,需要对数据库频繁的读写操作,虽然android 自带的SQLiteOpenHelper的.这种方式比较方便易懂,但是在使用过程中需要写很多的sql语句,而且需要及时的关闭和释放资源,使用起来相对复杂,鉴于性能的考虑,决定采用一种ORM框架来解决,     在android中开源的数据库ORM解决方案中.主要有那么几种.综合各方面评价,觉得greenDao相对来说是一个综合考量最好的方案,所以决定试一下,     但是greenDao使用相关资料网上确实不多,

安卓GreenDao框架一些进阶用法整理

大致分为以下几个方面: 一些查询指令整理 使用SQL语句进行特殊查询 检测表字段是否存在 数据库升级 数据库表字段赋初始值 一.查询指令整理 1.链式执行的指令 return mDaoSession.getUserDao().queryBuilder(). XXX. XXX. XXX. list(); 一般的查询语句会在中间xxx的位置加上各种判断和过滤的方法指令,除了最后的终结指令list()或unique()返回的是集合或业务对象,其他的都是返回QueryBuilder对象,大多数情况下XX

Android ORM——初识greenDAO 3及使用greenDAO 3前应该掌握的一些知识点(一)

引言 总所周知,SQLite--内嵌于Android中一个占用内存极小的关系型,作为我们Android存储领域中重要的一员 ,或多或少都曾接触到数据库.即使Android系统中提供了许多操作SQLite的API,但是在业务开发中还是需要手动去编写原生SQL语句,这不仅复杂.不好维护,更重要的是不高效,常常会因为SQL语句写错而增加了开发成本,于是便出现了ORM(对象关系映射)框架,简化了编写SQL语句的开发工作,其中比较著名的有GreenDao.OrmLite.Litepal等. 一.green

数据库ORM框架GreenDao

常用的数据库: 1). Sql Server2). Access3). Oracle4). Sysbase5). MySql6). Informix7). FoxPro8). PostgreSQL9). IBM 的DB2 2.特点. -oracle: 1.数据库安全性很高,很适合做大型数据库.支持多种系统平台(HPUX.SUNOS.OSF/1.VMS. WINDOWS.WINDOWS/NT.OS/2). 2.支持客户机/服务器体系结构及混合的体系结构(集中式.分布式. 客户机/服务器). -sq