一.导入项目
从 GreenDAO Github 上获取导入方式,在此不赘述。
二.配置数据库
在module的build文件中,android节点下,配置数据库的基本内容
greendao{
schemaVersion 1
daoPackage 'com.xxx.xxx.xxx'
targetGenDir 'src/main/java'
}
schemaVersion 版本号,更新时的比对,没有的话数据库没办法判断新旧版本
daoPackage 自动生成的工具类放置的位置
targetGenDir 嗯,字面意思
三.构建Entity类
作为存储的主体,GreenDAO 会把这个java类中的字段映射到数据库,作为数据的一个个元素。
最简单的例子:
@Entity
public class Student {
@Id(autoincrement = true)
private Long id;
private String name;
}
@Entity 必须加到类定义头部,代表,需要映射到数据库中。
@Id 代表主键,autoincrement 不用多说了(注意,设置自增,类型必须为java类 Long)
之后make project,就会自动生成一些实际操作用的类,这里不做解释。
四.使用
接下来就可以开始使用了,最基础的数据库增删改查。
// greendao 的所有数据操作的出发点,首先获取
DaoMaster daoMaster = new DaoMaster(new DaoMaster.DevOpenHelper(this, "name").getWritableDb());
//获取到 操作Student 这个表的DAO
StudentDao studentDao = daoMaster.newSession().getStudentDao();
//增删改 都有方法直接调用
studentDao.insert();
studentDao.delete();
studentDao.update();
查询需要另外创建查询工具
QueryBuilder queryBuilder = studentDao.queryBuilder();
//where查询
queryBuilder.where(StudentDao.Properties.Id.eq(1));
//list所有
queryBuilder.list();
五.数据库升级
当我们项目不断升级,内容增多,势必会对数据库要求更高,数据库升级是必不可少的。数据需要从旧表迁移到新表。
使用 GreenDaoUpgradeHelper 表升级,简单轻松。
导入,github上有详解。
新建一个Helper类用于更新数据库,需要继承DaoMaster.OpenHelper
public class UpdateHelper extends DaoMaster.OpenHelper {
public UpdateHelper(Context context, String name) {
super(context, name);
}
public UpdateHelper(Context context, String name, SQLiteDatabase.CursorFactory factory) {
super(context, name, factory);
}
@Override
public void onUpgrade(Database db, int oldVersion, int newVersion) {
//把用到的所有数据的DAO.class都加进来
MigrationHelper.migrate(db, StudentDao.class);
}
}
接下来升级一下Student,增加一个字段
@Entity
public class Student {
@Id(autoincrement = true)
private Long id;
private String name;
private String classNum;
}
注意:需要删除带有@Generated字样的构造方法,再进行make project,构造方法会自动填写。
数据元更新后,我们要更新数据库版本,就是build下面的
greendao{
schemaVersion 2 //更新为2
daoPackage 'com.xxx.xxx.xxx'
targetGenDir 'src/main/java'
}
最后在,需要升级的地方调用
UpdateHelper helper = new UpdateHelper(this, "name");
new DaoMaster(helper.getWritableDatabase())
神奇的发现,数据库里数据仍存在,但是新增了一个字段。升级成功!