话不多说,如下:
APP gradle 中添加
apply plugin: 'org.greenrobot.greendao'
greendao{
schemaVersion 1
daoPackage 'com.xxx.xxx.xxx.db'
targetGenDir 'src/main/java'
}
compile 'org.greenrobot:greendao:3.2.2'
PROJECT gradle中,dependencies{ ...目录中} 添加:
classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2'
写自己的实体类,比如:
@Entity
public class Test{
@Id(autoincrement = true)
private Long id;
@NotNull
public String name;
@NotNull
public String number;
}
在写下面之前我先把 实体类中的一些注释解释一下,
@Entity 用于标识这是一个需要Greendao帮我们生成代码的bean
@Id 标明主键,括号里可以指定是否自增 相当于2.2版本的
@Property 用于设置属性在数据库中的列名(默认不写就是保持一致)
@NotNull 非空
@Transient 标识这个字段是自定义的不会创建到数据库表里 相当于2.2版本的
@ToMany(referencedJoinProperty = “xxx”):表示一对多的关系,referencedJoinProperty = “bookId”,
表示引用关联实体的属性“bookId”,此属性名对应引用实体类的变量名。
@ToOne(joinProperty = “xxx”):表示一对一,或者多对一的关系,joinProperty = “bookId”,表示分享属 性“bookId”,此属性名对应本类的变量名。
搞完上面的那些之后,编译项目,项目会自动生成几个文件,在你写的
daoPackage 'com.xxx.xxx.xxx.db'
这个文件的目录下,其中
DaoMaster:可以认为是Dao中的执行官。它保存了sqlitedatebase对象以及操作DAO classes(注意:不是对象)。
其提供了一些创建和删除table的静态方法,其内部类OpenHelper和DevOpenHelper实现了SQLiteOpenHelper并创建数据库的框架。
DaoSession:会话层。操作具体的DAO对象(注意:是对象),比如各种getter方法。
XXXDao:生成的某某Dao类,通常对应具体的java类,比如NewsDao等。其有更多的权限和方法来操作数据库元素(比方说插入、更新、删除、查询等等)。
搞清楚上面这些之后,我们可以写个数据库工具类或者管理者封装下常用的操作,然后对数据直接进行操作处理。
类似于如下:
public class GreenDaoManager {
private DaoMaster mDaoMaster;
private DaoSession mDaoSession;
private static GreenDaoManager mInstance;
private GreenDaoManager(){
if (mInstance == null) {
DaoMaster.DevOpenHelper devOpenHelper = new
DaoMaster.DevOpenHelper(MyApp.getContext(), "user1-db", null);
mDaoMaster = new DaoMaster(devOpenHelper.getWritableDatabase());
mDaoSession = mDaoMaster.newSession();
}
}
public static GreenDaoManager getInstance() {
if (mInstance == null) {
synchronized (GreenDaoManager.class) {
if (mInstance == null) {
mInstance = new GreenDaoManager();
}
}
}
return mInstance;
}
public DaoMaster getMaster() {
return mDaoMaster;
}
public DaoSession getSession() {
return mDaoSession;
}
public DaoSession getNewSession() {
mDaoSession = mDaoMaster.newSession();
return mDaoSession;
}
/**
* insert
*/
public void insertData(eg:Entity){
if (null== Entity)
return;
getSession().getUserDao().insert(Entity);
}
}
目前还在对复杂数据的处理进行摸索研究中,后续有体会,会慢慢的加上更新