Android greenDAO 数据库框架接入指南

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进行业务封装,敬请期待!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值