目前GreenDao在Android数据库开发中较其他开发框架有着更大的优势,本篇文章主要讲述GreenDao3.x版本的基本使用和使用GreenDao进行应用的数据库升级。

一、GreenDao的环境配置

1.当前项目Project的build.gradle

Android greendao autoincrement从0还是从1自增 android greendao3.0使用_数据

2.当前module的build.gradle

Android greendao autoincrement从0还是从1自增 android greendao3.0使用_实体类_02


配置GreenDao相应类生成的位置,在android{…}中添加如下代码:

Android greendao autoincrement从0还是从1自增 android greendao3.0使用_数据库_03

Android greendao autoincrement从0还是从1自增 android greendao3.0使用_数据_04

二、GreenDao的使用

2.1 搭建实体类
这里的实体类的各个属性就是相应表的列,示例代码如下所示:

package study.com.greendaodemo.dao;
import org.greenrobot.greendao.annotation.Entity;
import org.greenrobot.greendao.annotation.Property;
import org.greenrobot.greendao.annotation.Generated;

@Entity
public class User {
    private Long id;
    private String nickName;
    private int age;
}

2.2 生成相应DaoManager、DaoMaster、DaoSession以及xxxDao

创建完实体类之后,在AndroidStudio中进行编译便可生成上述四个类。具体操作如下所示:

Android greendao autoincrement从0还是从1自增 android greendao3.0使用_数据库_05


其中xxxDao就是实体类名+Dao,即就是相应实体类的Dao。

2.3 GreenDao3.x的注解
GreenDao3.x中提供了大量实体类注解,相应实体类中必须要添加@Entity否则不能生成相应的数据库操作类,其他注解可以根据需求去网上查询这里就不做介绍了。

三、应用数据库升级

步骤一:将之前的xxxDao保存一份
步骤二:修改Module中build.gradle下关于greendao的schemaVersion的值,该值必须比之前的值大。
步骤三:在相应的实体类中添加想要新增的字段,然后重复本篇博客第二部分的操作即可生成新的数据库操作类。
步骤四:由于GreenDao提供的升级数据库的方法就是删除之前的表同时创建新的表,虽然达到了升级数据库的效果,但是却把之前表中的数据也删除了。如果想要在保存之前表中数据的同时达到升级数据库的目的,那么就要继承DaoMaster.OpenHelper同时重写onUpgrade方法。示例代码如下所示:

package study.com.greendaodemo;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.util.Log;

import org.greenrobot.greendao.database.Database;

import study.com.greendaodemo.dao.DaoMaster;
import study.com.greendaodemo.dao.UserDao;

public class UserHelper extends DaoMaster.OpenHelper {
    public UserHelper(Context context, String name) {
        super(context, name);
    }

    public UserHelper(Context context, String name, SQLiteDatabase.CursorFactory factory) {
        super(context, name, factory);
    }

    @Override
    public void onUpgrade(Database db, int oldVersion, int newVersion) {
        //UserDao.class是添加完字段之后的生成的
        //UserDao1.class是为升级之前生成的
        MigrationHelper.migrate(db, UserDao.class, UserDao1.class);
    }
}

四、Demo的应用截图

Android greendao autoincrement从0还是从1自增 android greendao3.0使用_实体类_06


上图中MigrationHelper是一位国外大神封装的数据迁移类,DaoManager是我自己封装数据库操作类,这两个类在后面Demo源码地址中可以下载到。

五、效果图如下所示

未升级数据库数据截图如下:

Android greendao autoincrement从0还是从1自增 android greendao3.0使用_实体类_07

升级数据库数据截图如下:

Android greendao autoincrement从0还是从1自增 android greendao3.0使用_数据_08


从上面两张图可以发现数据库升级之后添加了ADDRESS字段同时也保存了原来的数据。

Demo源码地址
https://github.com/Duckdan/GreenDaoDemo