关于GreenDao的初步使用
2014-12-03 09:40
411 查看
GreenDao是目前比较火的关于Sqlite的第三方开源框架,官网地址是http://greendao-orm.com/。
官网的介绍:
greenDAO的主要设计目标
最高性能(可能是Android最快的ORM)
易于使用的API
高度Android优化
最小的内存占用
很小,专注于要领
源码有主要5个包:
其中DaoExanple,DaoExampleGenerator,DaoTest是java工程,导入的时候注意。DaoCore就相当于整个源码了。
导入之后运行DaoExample可以看到效果。
另外一个需要到这里下载:http://search.maven.org/#search|ga|1|freemarker:
选择一个最新版本的。
其中greendao-generator-1.3.1和freemarker-2.3.21这两个jar包导入DaoExampleGenerator和DaoGenerator这两个java项目。
(4)之后就可以方便的使用Greendao了,这是官网的api:
2)也可以使用推荐的方法:使用greenDAO提供的QueryBuilder的API。
3)查询还支持结果延迟加载(lazy-loading),主要为操作较大查询结果是节约内存并提高性能。
查询first name是Joe,并在1970年10月以及之后的所有人:
也支持返回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。如下代码:
假如QueryBuilder没有提供你需要的特性,你也可以使用queryRaw() 和 queryRawCreate() 方法。具体就不再详细介绍了。
(5)问题定位(日志)
你可能会遇到查询结果并不是预期的那样,这时候你就可以设置两个静态flag参数来打日志定位问题:
这将会将产生的sql命令以及传递的参数以日志方式输出,由此方便程序员定位问题。
官网的介绍:
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的使用
- Android 关于greenDao的使用教程
- 关于GreenDao数据库的使用,所需要注意的坑
- Android 关于greenDao的使用教程
- 关于GreenDao数据库的使用,所需要注意的坑
- 关于GreenDao数据库框架在android studio上的相关配置和使用
- GreenDao 初步使用
- 关于使用LoadRunner对Appeon Web应用进行压力测试的初步介绍
- 关于多线程同步的初步教程--使用synchronized
- 关于使用LoadRunner对Appeon Web应用进行压力测试的初步介绍
- GreenDao的使用心得和分享
- 关于使用ssh框架时,pojo、dao、service三层的关系
- 关于H.265的初步入门工具的使用
- Android:greenDao与Parcelable使用总结
- greenDao的使用教程
- Android之greenDao,一个orm的使用
- 关于多线程同步的初步教程--Simaphore的设计及使用
- 【Expression 序列化】WCF的简单使用及其Expression Lambada的序列化问题初步解决方案(四)——关于Guid的问题
- 关于使用ssh框架时,pojo、dao、service三层的关系