使用GreenDao已经好久了,不知不觉已经更新到3.x版本了。
记录一下使用基本方法:
1.先在app目录下的main文件夹下新建java-gen目录:
注:一会的java文件指定生成在这个目录下, 当然这不是必须的,你可以自定义目录,这样做的目的是,目录结构清晰等这那的。
2.在app下build.gradle中指定识别java-gen,顺便倒入greendao依赖:
compile "org.greenrobot:greendao:3.2.2"
sourceSets {
main {
java.srcDirs = ['src/main/java', 'src/main/java-gen']
}
}
3.新建java工程:
然后在java工程中倒入依赖:
compile 'org.greenrobot:greendao-generator:3.2.2'
4.在java工程中新建一个java类:GreenDaoGenerator,其中我新建了一个表后运行这个java类,
greendao会根据我们的设置和表新建的字段,直接将需要的类生成到刚才我们指定的目录下:
package com.example;
import org.greenrobot.greendao.generator.DaoGenerator;
import org.greenrobot.greendao.generator.Entity;
import org.greenrobot.greendao.generator.Schema;
/**
* java工程生成数据库表
*/
public class GreenDaoGenerator {
public static void main(String[] args){
// 生成数据库实体类xxentity 对应的是数据库的表
Schema schema = new Schema(1, "com.school.entity");
addTestGroup(schema);
schema.setDefaultJavaPackageDao("com.school.dao");
try {
new DaoGenerator().generateAll(schema, "/Users/katsurayasubumi/StudioProjects/Reliable_TestInput/app/src/main/java-gen");
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 测试项目分组表
*/
private static void addTestGroup(Schema schema){
Entity entity = schema.addEntity("TestGroup");
entity.addIdProperty();
entity.addIntProperty("group");
entity.addStringProperty("name");
}
}
注:1.其中entity.addIdProperty();是给这张表新建一个主键,自增长的id。你也可以换成你实际需求中的唯一标识的”id“。
2.main函数中Schema在实例化的时候,第一个参数为数据库版本号,第二个参数是生成对应表实体类的目录。下面setDefal..是指定greendao生成的类的目录。
上图就是运行java工程之后,对应目录下生成了对应的文件。
5.接下来再来封装一下数据库操作类。
public class DaoManager {
private static final String TAG = DaoManager.class.getSimpleName();
// 数据库名称
private static final String DB_NAME = "reliable.sqlite";
// 多线程访问
private volatile static DaoManager manager;
private static DaoMaster.DevOpenHelper helper;
private static DaoMaster daoMaster;
private static DaoSession daoSession;
private Context context;
/**
* 使用单例模式获得操作数据库的对象
*/
public static DaoManager getInstance(){
DaoManager instance = null;
if (manager == null){
synchronized (DaoManager.class){
if (instance == null){
instance = new DaoManager();
manager = instance;
}
}
}
return manager;
}
public void init(Context context){
this.context = context;
}
/**
* 判断是否存在数据库
* 如果没有则创建数据库
*/
public DaoMaster getDaoMaster(){
if (daoMaster == null){
// DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(context, DB_NAME, null);
MyOpenHelper myOpenHelper = new MyOpenHelper(context, DB_NAME, null);
daoMaster = new DaoMaster(myOpenHelper.getWritableDatabase());
}
return daoMaster;
}
/**
* 完成对数据库的添加删除修改查询等的操作
* 注:仅仅是一个接口
*/
public DaoSession getDaoSession(){
if (daoSession == null){
if (daoMaster == null){
daoMaster = getDaoMaster();
}
daoSession = daoMaster.newSession();
}
return daoSession;
}
/**
* 打开输出日志的操作
* 注:默认是关闭的
*/
public void setDebug(){
QueryBuilder.LOG_SQL = true;
QueryBuilder.LOG_VALUES = true;
}
/**
* 关闭所有的操作
* 注:数据库开启之后,使用完毕必须要关闭
*/
public void closeConnection(){
closeHelper();
closeDaoSession();
}
public void closeHelper(){
if (helper != null){
helper.close();
helper = null;
}
}
public void closeDaoSession(){
if (daoSession != null){
daoSession.clear();
daoSession = null;
}
}
}
6.最后就是对表具体的操作了,下一篇来记录: