参考
一.准备工作
在工程的build.gradle文件中添加
repositories {
...
mavenCentral()
}
dependencies {
...
classpath 'org.greenrobot:greendao-gradle-plugin:3.3.0'
}
在项目的build.gradle文件中添加
apply plugin: 'org.greenrobot.greendao'
android {
...
greendao {
schemaVersion 1
}
}
dependencies {
...
implementation 'org.greenrobot:greendao:3.3.0'
}
(1)当Bean类对象发生改变时,schemaVersion的数值要增加。
(2)目前引用的版本是最新版,后续更新要注意上方的参考文档。
二. 创建实体类
例:
@Entity
public class TestUser {
@Id(autoincrement = true)
private Long id;
@NotNull
private String name;
@NotNull
private int age;
@NotNull
private String sex;
@Index(unique = true)
private String uid;
}
主键一定要大写的Long。
点击Build → Make Project会自动生成代码。
@Entity
public class TestUser {
@Id(autoincrement = true)
private Long id;
@NotNull
private String name;
@NotNull
private int age;
@NotNull
private String sex;
@Index(unique = true)
private String uid;
@Generated(hash = 1872927493)
public TestUser(Long id, @NotNull String name, int age, @NotNull String sex,
String uid) {
this.id = id;
this.name = name;
this.age = age;
this.sex = sex;
this.uid = uid;
}
@Generated(hash = 925009630)
public TestUser() {
}
public Long getId() {
return this.id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return this.age;
}
public void setAge(int age) {
this.age = age;
}
public String getSex() {
return this.sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getUid() {
return this.uid;
}
public void setUid(String uid) {
this.uid = uid;
}
}
这个类要用到很多的注解,我也简单的整理了一下。
注解 | 参数 | 解释 |
---|---|---|
@Entity | … | @Entity注释标记的Java类作为greenDAO一个presistable实体。 |
@Id | autoincrement | 主键,参数autoincrement 是使ID值不断增加(不重用旧值)的标志,必须是long或Long属性作为其主键。 |
@NotNull | 无 | 表明值不能为空 |
@Index | unique | 在属性上使用@Index为相应的数据库列创建数据库索引,unique =true表明强制所有值都是唯一的 |
注解就先整理这些,具体可以在使用时有目的的查询或参考官方文档。
三.初始化
可以将初始化以及增删改查进行封装,在初始化时需要context而且只需要初始化一次,为防止内存泄露所以我们将初始化放在Application进行操作。
public class GreenDaoManager {
private static GreenDaoManager greenDaoManager;
private DaoSession daoSession;
/**
* 私有化
*/
private GreenDaoManager(){
}
/**
* 对外暴露的获取方法
* @return 单例对象
*/
public static GreenDaoManager getInstance(){
if (null==greenDaoManager){
synchronized (GreenDaoManager.class){
if (null==greenDaoManager){
greenDaoManager=new GreenDaoManager();
}
}
}
return greenDaoManager;
}
/**
* 数据库初始化
* @param context 上下文
*/
public void init(Context context){
DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(context, "test-db", null);
SQLiteDatabase db = helper.getWritableDatabase();
DaoMaster daoMaster = new DaoMaster(db);
daoSession = daoMaster.newSession();
}
/**
* 获取管理特定架构的所有可用DAO对象
* @return daoSession
*/
public DaoSession getDaoSession(){
return daoSession;
}
}
public class BaseApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
//初始化数据库
GreenDaoManager.getInstance().init(this);
}
}
这里面用到了单例模式,可以参考我之前的博客。