最近在找工作,总结一下以前做过的项目和使用过的框架,关于GreenDao的框架使用有点忘记了,重新调试了一下,尝试了一些新的做法,遇到了一些问题,记录一下。
GreenDao引入项目的步骤如下:
- 在project的build.gradle的dependcies中添加GreenDao的classpath项,如下:
dependencies { classpath 'com.android.tools.build:gradle:2.3.3' classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2' }
- 在app的build.gradle添加plugin和依赖包:
apply plugin: 'org.greenrobot.greendao'
只需要添加这一个包即可。如果你添加的是greedao-generator或者greedao-api,也必须加上这个才可以,不然gradle编译通不过。dependencies { …… compile 'org.greenrobot:greendao:3.2.2' }
指定生成DaoMaster、DaoSession和BeanDao类所在路径greendao{ schemaVersion 1 daoPackage 'com.support.android.designlibdemo.gen' targetGenDir 'src/main/java' } schemaVersion: 指定数据库schema版本号,数据库、迁移等操作会用到; daoPackage: dao的包名,包名默认是entity所在的包; targetGenDir: 生成数据库文件的目录;
- 创建一个实体类,如User类,在其中必须要通过@Id指定一个id字段,且该字段必须是long或者是Long类型的(网上有人说必须是Long类型的,是不对的,经实测基本类型的long类型也可以)。需要多说一点的是,编译后会在该类的构造方法上自动添加@Generated的注解,并且生成一个hashcode,此外还会自动生成一个带有@Generated注解和hashcode的无参的构造方法,如果对该类进行修改(如修改了参数名或参数类型),必须要删除带参的构造方法上的hashcode,重新编译让它自动生成一个新的code。无参的没关系,我的理解是无参的构造方法没有改变,所以hashcode可以是用原来的。还有一点要说明的是指定的id字段如果没有被
@Property(nameInDb = "my_id")注解,则在数据库中会默认保存成_id列名,不管你在该类中给它命名为什么。
- 为了方便管理,一般都会创建一个DaoManager类,实例化DaoMaster.DevOpenHelper、DaoMaster、DaoSession,并使用这些实例化后的对象进行增删改查的操作,具体写法网上有很多(比如这个Android数据存储之GreenDao 3.0 详解),这里就不再赘述。