1 关于GreenDAO
greenDao是一个将对象映射到SQLite数据库中的轻量且快速的ORM解决方案。可以说它是专门为android平台下优化的ORM数据库,关于greenDAO的详细资料可以看官网greenDao
greenDAO 主要有以下几大优势:
1、一个精简的库
2、性能最大化
3、内存开销最小化
4、易于使用的 APIs
5、对 Android 进行高度优化
下面截取一张官方的关于GreenDao,ORMLite,ActiveAndroid这三个数据库的性能对比图:
可以看到greenDAO相比其他的数据库在插入和读取上有压倒性的优势,这个对于我们客户端来说太重要了,因为我们客户端经常会读取数据库。好了,下面介绍greenDAO的使用方法。
2 greenDAO 3.x的使用
1 在as中导入相关的包
我这里导入的是3.2.0版本
apply plugin: 'org.greenrobot.greendao'
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'org.greenrobot:greendao-gradle-plugin:3.2.1'
}
}
dependencies {
....
compile 'org.greenrobot:greendao:3.2.0'
....
}
以上代码主要在你的项目下要引入数据库模块的module build.gradle下配置。
2 自定义greenDao相关路径
使用greenDAO的方便之处就是很多相关数据库的代码,我们可以使用greenDAO自动生成,但是我们需要指定生成的路径。
在我们module 下的 build.gradle配置以下代码:
greendao {
schemaVersion 1
daoPackage 'com.qiyei.funny.greendao.gen'
targetGenDir 'src/main/java'
}
属性介绍:
schemaVersion–> 指定数据库schema版本号,迁移等操作会用到;
daoPackage –> dao的包名,包名默认是entity所在的包;
targetGenDir –> 生成数据库文件的目录;
好,基本上我们已经完成greenDAO的配置了,配置过程也很简单,现在我们需要同步一下工程。
3 创建实体类,并生成DaoSession及DaoMaster
我们首先创建以下实体类,并使用greenDAO中的注解来指明实体及字段
@Entity
public class User {
@Id
private Long id;
private String name;
private String sex;
}
greendao中的注解
(一) @Entity 定义实体
@nameInDb 在数据库中的名字,如不写则为实体中类名
@indexes 索引
@createInDb 是否创建表,默认为true,false时不创建
@schema 指定架构名称为实体
@active 无论是更新生成都刷新
(二) @Id
(三) @NotNull 不为null
(四) @Unique 唯一约束
(五) @ToMany 一对多
(六) @OrderBy 排序
(七) @ToOne 一对一
(八) @Transient 不存储在数据库中
(九) @generated 由greendao产生的构造函数或方法
我们创建了一个名为User的实体,并且指定了@Entity为User,@Id为id ,这里我们不用编写setter/getter方法,直接make project,神奇的事情出现了,我们会看到我们的工程为生成如下的代码及文件:
/**
* Created by qiyei2015 on 2016/12/11.
* 1273482124@qq.com
*/
@Entity
public class User {
@Id
private Long id;
private String name;
private String sex;
@Generated(hash = 1265202627)
public User(Long id, String name, String sex) {
this.id = id;
this.name = name;
this.sex = sex;
}
@Generated(hash = 586692638)
public User() {
}
public Long getId() {
return this.id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return this.sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
同时在com.qiyei.funny.greendao.gen包下会有以下三个文件生成。
可以看到,我们的@Entity就是制定了我们的新建了一张名字为User的表
接下来我们就正式的访问我们的数据库了,并进行增删改查的操作。
4 初始化数据库
/**
* 通过 DaoMaster 的内部类 DevOpenHelper,你可以得到一个便利的 SQLiteOpenHelper 对象。
* 可能你已经注意到了,你并不需要去编写「CREATE TABLE」这样的 SQL 语句,因为 greenDAO 已经帮你做了。
* 注意:默认的 DaoMaster.DevOpenHelper 会在数据库升级时,删除所有的表,意味着这将导致数据的丢失。
* 所以,在正式的项目中,你还应该做一层封装,来实现数据库的安全升级。
*/
// 1 新建数据库funny.db
DaoMaster.DevOpenHelper devOpenHelper = new DaoMaster.DevOpenHelper(getApplicationContext()
,"funny.db");
// 注意:该数据库连接属于 DaoMaster,所以多个 Session 指的是相同的数据库连接。
DaoMaster daoMaster = new DaoMaster(devOpenHelper.getWritableDb());
DaoSession daoSession = daoMaster.newSession();
以上步骤主要有以下几步:
1 新建数据库,使用DaoMaster.DevOpenHelper来实现。
2 获取DaoMaster对象,这个主要是为了我么后面获取DaoSession,通过DaoSession 我们才可以获取我们的实体的Dao。这里使用devOpenHelper.getWritableDb()来实现
3 获取DaoSession 对象。
以上我们就完成了数据库的初始化,接着我们是得到我们的User的Dao,如下:
UserDao userDao = daoSession.getUserDao();
得到了我们User的Dao我们 就可以进行数据库的增删查改了。
User 的插入
userDao.insert(new User(2L,"hello","boy"));
User的删除
userDao.deleteByKey(id);
User的修改
可以使用UserDao的update方法
public void update(T entity)
User的查询
QueryBuilder builder = userDao.queryBuilder();
List<User> list = builder.where(UserDao.Properties.Name.eq("hello")).list();
这样我们就完成了greenDAO的基本使用了。
关于greenDAO的使用可以参考官方的文档greenDAO官方文档
后面会写根据项目对greenDAO进行业务封装,敬请期待!