GreenDAO学习笔记

261 阅读2分钟

一.导入项目

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())

神奇的发现,数据库里数据仍存在,但是新增了一个字段。升级成功!