目前GreenDao在Android数据库开发中较其他开发框架有着更大的优势,本篇文章主要讲述GreenDao3.x版本的基本使用和使用GreenDao进行应用的数据库升级。
一、GreenDao的环境配置
1.当前项目Project的build.gradle
2.当前module的build.gradle
配置GreenDao相应类生成的位置,在android{…}中添加如下代码:
二、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中进行编译便可生成上述四个类。具体操作如下所示:
其中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的应用截图
上图中MigrationHelper是一位国外大神封装的数据迁移类,DaoManager是我自己封装数据库操作类,这两个类在后面Demo源码地址中可以下载到。
五、效果图如下所示
未升级数据库数据截图如下:
升级数据库数据截图如下:
从上面两张图可以发现数据库升级之后添加了ADDRESS字段同时也保存了原来的数据。
Demo源码地址
https://github.com/Duckdan/GreenDaoDemo