关于GreenDao的初步使用
来源:互联网 发布:linux python vim 编辑:程序博客网 时间:2024/05/16 03:20
GreenDao是目前比较火的关于Sqlite的第三方开源框架,官网地址是http://greendao-orm.com/。
官网的介绍:
greenDAO的主要设计目标
最高性能(可能是Android最快的ORM)
易于使用的API
高度Android优化
最小的内存占用
很小,专注于要领
1. 下载源代码
https://github.com/greenrobot/greenDAO
源码有主要5个包:
其中DaoExanple,DaoExampleGenerator,DaoTest是java工程,导入的时候注意。DaoCore就相当于整个源码了。
导入之后运行DaoExample可以看到效果。
2. 前言
下载github的源码之后还需要到官网去下载另外3个jar包,其中两个jar包是这里下载http://search.maven.org/#search|ga|1|greendao:另外一个需要到这里下载:http://search.maven.org/#search|ga|1|freemarker:
选择一个最新版本的。
其中greendao-generator-1.3.1和freemarker-2.3.21这两个jar包导入DaoExampleGenerator和DaoGenerator这两个java项目。
3. 初步使用
最重要的就是DaoExampleGenerator项目中的ExampleDaoGenerator类,它会自动生成实体类和dao类到你的项目。
(1)首先是这一段,其中"../DaoExample/src-gen"就是../你项目的名称/文件夹路径,在运行之前需要先在你项目中创建src—gen文件夹,否则会报错。 new DaoGenerator().generateAll(schema, "../DaoExample/src-gen");
(2)然后是这一段,前面的参数是数据库版本号,后面的是上面创建的src—gen文件夹下面的包Schema schema = new Schema(1000, "de.greenrobot.daoexample");
(3)这一段就是所产生的实体类了,修改好自己需要的属性,就可以在运行这个类了,右键→run as→java application,然后神奇的事情就发生了,官网项目中的src—gen下面产生了8个类,其中DaoMaster和DaoSession是一定会产生的,另外六个是三个实体类以及它们的dao。
private static void addNote(Schema schema) { Entity note = schema.addEntity("Note"); note.addIdProperty();//主键,long类型 note.addStringProperty("text").notNull();//添加字符串类型的字段 note.addStringProperty("comment"); note.addDateProperty("date");//添加日期类型的字段 }
(4)之后就可以方便的使用Greendao了,这是官网的api:
①Android项目中的api:http://greendao-orm.com/javadoc/greendao/
②java项目中的api:http://greendao-orm.com/javadoc/greendao-generator/
3. Android项目使用
(1)查询 -- Query
1)你可以使用原生的SQl(raw sql)语句;2)也可以使用推荐的方法:使用greenDAO提供的QueryBuilder的API。
3)查询还支持结果延迟加载(lazy-loading),主要为操作较大查询结果是节约内存并提高性能。
查询first name是Joe,并在1970年10月以及之后的所有人:
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();
(2)Lazylist
greenDAO支持返回唯一查询结果(如果没有返回null) ---- 调用Query或QueryBuilder的unique()方法;
也支持返回list ---- 调用list()方法。
当不希望返回null作为结果时,则调用uniqueOrThrow()方法,当结果null时将直接抛出异常。
返回多个结果解释:
list(): 所有entity均会被加载到内存中。结果仅是一个简单的ArrayList。使用最简单。
listLazy(): 查询结果会根据需要加载到内存中。列表中的元素仅在accessed for the first time,它才会被加载并缓存。该方法必须主动关闭(Must be closed)。
listLazyUncached(): 虚拟的结果列表,任何对元素的方法实际都会到数据库中去加载数据。Must be closed
listIterator(): 根据需要迭代结果(lazily)。数据不缓存。Must be closed
在greenDAO实现中,后3中其实都使用的LazyList类。为了实现根据需要加载,其内部实现上是保存了数据库cursor的引用。这也是为何这3中方式must be closed,其就是为了释放内部cursor和迭代器(通常是在try-finally块中完成close)。
(3)删除操作(delete query)
删除操作会删除所有满足条件的实体。为实现批量删除(bulk delete),调用QueryBuilder的 buildDelete方法并执行DeleteQuery。该部分API还不稳定,可能会改变就不介绍了。
(4)原生sql查询
推荐的方法执行原生sql语句是通过QueryBuilder和WhereCondition.StringCondition。如下代码:
Query query = userDao.queryBuilder().where( new StringCondition("_ID IN " + "(SELECT USER_ID FROM USER_MESSAGE WHERE READ_FLAG = 0)").build();
假如QueryBuilder没有提供你需要的特性,你也可以使用queryRaw() 和 queryRawCreate() 方法。具体就不再详细介绍了。
(5)问题定位(日志)
你可能会遇到查询结果并不是预期的那样,这时候你就可以设置两个静态flag参数来打日志定位问题:
QueryBuilder. LOG_SQL = true ; QueryBuilder. LOG_VALUES = true ;
这将会将产生的sql命令以及传递的参数以日志方式输出,由此方便程序员定位问题。
- 关于GreenDao的初步使用
- 关于greenDao的使用
- 关于GreenDao的使用
- GreenDao 初步使用
- Android 关于greenDao的使用教程
- 关于第三方开源库GreenDao的使用心得
- 关于第三方开源库GreenDao的使用心得
- 提高android数据库性能,GreenDao初步使用
- 关于eclipse的初步使用
- 关于utl_file的初步使用
- 关于ListView的初步使用
- 关于GreenDao数据库的使用,所需要注意的坑
- 我的Android入门之路:一、初步接触之GreenDAO学习使用体验
- greenDao的使用教程
- GreenDAO的简单使用
- GreenDao的使用
- GreenDao的使用
- GreenDao的使用
- 使用Filter限制J2EE最大并发数
- OpenCV图像处理篇之Hough变换
- cetos 6.5中文乱码真是麻烦呀
- 如何修改MyEclipse 8.5的默认工作空间
- 迭代器思想总结
- 关于GreenDao的初步使用
- 读论文BinarizedNormedGradientsforObjectnessEstimationat300fps
- 定时器锁屏问题分析
- [乐意黎原创] 完美解决 javax.mail.SendFailedException: Invalid Address 与 SMTPAddressFailedException 抛错
- 嵌入式代码open("/dev/ttyso",o_RDWR/O_NOCTTY/O_NDELAY);这个代码说的含义
- 网站建设过程中必须要重视的元素
- final的运用
- 柯南君: 看TCP/IP 之一 (协议分层)
- genymotion 此应用与您的手机不兼容