前言 android开发中我们或多或少都会接触到数据库。android中提供了一个占用内存极小的关系型数据库-sqlite。虽然android系统中提供了许多操作sqlite的api,但是我们还是需要手动去编写sql语句,这经常会出现一些莫名其妙的问题(
官网上的介绍,greendao 是一个将对象映射到 sqlite 数据库中的轻量且快速的 orm 解决方案。(greendao is a light & fast orm solution that maps objects to sqlite databases.) greendao特点
1. 性能最大化,可能是android平台上最快的orm框架
2. 易于使用的api
3. 最小的内存开销
4. 依赖体积小
5. 支持数据库加密
6. 强大的社区支持 greendao有如此多的有点,我们还有什么理由不去使用它呢。 greendao配置 在build.gradle(module:app)中添加下面代码: [Java] [color=rgb(51, 102, 153) !important]查看源文件 [color=rgb(51, 102, 153) !important]复制代码
[color=rgb(160, 160, 160) !important][color=#a0a0a0 !important]?
01
02
03
04
05
06
07
08
09
10
11
12
| buildscript {
repositories {
mavencentral()
}
dependencies {
classpath 'org.greenrobot:greendao-gradle-plugin:3.2.1'
}
}
apply plugin: 'org.greenrobot.greendao'
dependencies {
compile 'org.greenrobot:greendao:3.2.0'
}
|
其他配置 在build.gradle(module:app)中添加: [Java] [color=rgb(51, 102, 153) !important]查看源文件 [color=rgb(51, 102, 153) !important]复制代码
[color=rgb(160, 160, 160) !important][color=#a0a0a0 !important]?
| greendao {
schemaversion 1//数据库版本号
daopackage 'com.com.sky.downloader.greendao'//设置daomaster、daosession、dao包名
targetgendir 'src/main/java'//设置daomaster、daosession、dao目录
//targetgendirtest:设置生成单元测试目录
//generatetests:设置自动生成单元测试用例
}
|
上述配置是可选项,如果不配置,则默认生成在build下:
greendao的基本配置就已经完成了,下面我们编写一个实体类。 实体类user [Java] [color=rgb(51, 102, 153) !important]查看源文件 [color=rgb(51, 102, 153) !important]复制代码
[color=rgb(160, 160, 160) !important][color=#a0a0a0 !important]?
| @entity
public class user {
@id(autoincrement = true)
private long id;
private string name;
private int age;
}
|
相关注解说明: 实体@entity注解 schema:告知greendao当前实体属于哪个schema active:标记一个实体处于活跃状态,活动实体有更新、删除和刷新方法 nameindb:在数据库中使用的别名,默认使用的是实体的类名 indexes:定义索引,可以跨越多个列 createindb:标记创建数据库表 基础属性注解 @id:主键 long 型,可以通过@id(autoincrement = true)设置自增长 @property:设置一个非默认关系映射所对应的列名,默认是使用字段名,例如:@property(nameindb = "name") @notnull:设置数据库表当前列不能为空 @transient:添加此标记后不会生成数据库表的列 索引注解 @index:使用@index作为一个属性来创建一个索引,通过name设置索引别名,也可以通过unique给索引添加约束 @unique:向数据库添加了一个唯一的约束 关系注解 @toone:定义与另一个实体(一个实体对象)的关系 @tomany:定义与多个实体对象的关系 当我们编写好实体类并添加自己需要的注解之后,点击make project或者make module 'app',就会项目的build目录下或者自己设定的目录下看到生成的三个类文件:
1. daomaster
2. daosession
3. userdao 后面的数据库操作需要借助这三个类来进行,同时在我们的实体类中自动生成了各个属性的get、set方法。
初始化greendao 一般建议在application中初始化数据库
devopenhelper有两个重载方法:
1. devopenhelper(context context,string name)
2. devopenhelper(context context,string name,cursorfactory factory) context上下文这个不用多说,name数据库的名字,cursorfactory游标工厂,一般不用,传入null或者使用两个参数的方法即可。我们对外提供一个getdaosession()的方法供外部使用。 增 注意:long型id,如果传入null,则greendao会默认设置自增长的值。
1. insert(user entity):插入一条记录
删
1. deletebykey(long key) :根据主键删除一条记录。
2. delete(user entity) :根据实体类删除一条记录,一般结合cha询方法,cha询出一条记录之后删除。
3. deleteall(): 删除所有记录。
改 update(user entity):更新一条记录
查
1. loadall():cha询所有记录
2. load(long key):根据主键cha询一条记录
3. querybuilder().list():返回:list
4. querybuilder().where(userdao.properties.name.eq("")).list():返回:list
5. queryraw(string where,string selectionarg):返回:list 总结 至此,greendao的基本使用方法就这些了,后面还有一些关于数据的升级等问题,后面再具体介绍。
|