您的位置:首页 > 移动开发 > Android开发

Android greenDAO入门

2015-06-25 21:57 501 查看

Android greenDAO入门

我们在进行android APK开发的时候经常要用到数据库,最初的时候我们都是自己写DBOpenHelper继承SQLiteOpenHelper,DbManager去管理数据库的表,而且经常会碰到不同线程访问的问题导致APK挂掉的问题,greenDAO 就可以很好的帮我们处理掉这些问题。用起来也非常的方便,用greenDAO的时候我们自己不用考虑什么问题。

网上也有好多关于greenDAO的文章。我这里就用一个很简单的例子写给像我一样刚入门级别的菜鸟看,我也是偶然在一个项目中用到了,如果你也是和我一样第一次使用greenDAO,可以结合代码一起看下怎么使用,可以让你很快的入门。

1. 实例代码地址

实例代码CSDN下载地址不用资源分下载

例子写的非常的简单,没有进行很多数据库的操作,只是让像我一样菜鸟的人能够大概知道要怎么使用。

2. 代码简单的介绍

代码是基于android studio的代码,主要包括两个module(app, templategenerator)。app module是android 工程是在这个工程里面都数据库进行操作。templategenerator module是java工程是用来自动greenDAO相关的代码。

templategenerator module:非常的简单(JAVA工程,自动生成一些代码)。

gradle 文件:

project(':templategenerator') {
apply plugin: 'application'
apply plugin: 'java'

mainClassName = "com.mktech.gsmartrouter.MobileTemplateGenerator"
// edit output direction
def outputDir = "../app/src-gen"

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'de.greenrobot:DaoGenerator:1.3.0'
compile 'org.freemarker:freemarker:2.3.20'
}

sourceSets {
main {
java.srcDirs = ['src/main/java']
resources.srcDirs = ['res']
}
}

task createDocs {
def docs = file(outputDir)
docs.mkdirs()
}

run {
args outputDir
}
}


def outputDir = “../app/src-gen” 中./app/src-gen 是我们要自动生产代码存放的路径。

compile ‘de.greenrobot:DaoGenerator:1.3.0’

compile ‘org.freemarker:freemarker:2.3.20’ 则是greenDAO generator工程要依赖的两个库。

java代码:

public void generateAll(String outDir) throws Exception {
Schema schema = new Schema(1, "greendao");
addCloudAccounts(schema);
addHomeShareUploadTableInfo(schema);
new DaoGenerator().generateAll(schema, outDir);
}

private static void addCloudAccounts(Schema schema) {
Entity accounts = schema.addEntity("User");
accounts.addStringProperty("password").notNull();
accounts.addStringProperty("username").notNull().primaryKey();
accounts.addBooleanProperty("rememberPassword");
}

private static void addHomeShareUploadTableInfo(Schema schema) {
Entity uploadInfo = schema.addEntity("HomeShareUploadInfo");
uploadInfo.addIdProperty().autoincrement();
uploadInfo.addStringProperty("filename").notNull();
uploadInfo.addStringProperty("md5").notNull();
uploadInfo.addStringProperty("from").notNull();
uploadInfo.addStringProperty("to").notNull();
uploadInfo.addDateProperty("uploadTime").notNull();
uploadInfo.addIntProperty("percent");
uploadInfo.addIntProperty("state");
uploadInfo.addIntProperty("type");
}


这里我就随便建了两个表User表 和 HomeShareUploadInfo表,如果需要的话可以继续添加比较简单。

Schema schema = new Schema(1, “greendao”); 中 greendao 是包的名字(/app/src-gen 文件夹下面的包的名字)

当执行`

public static void main(String[] args) throws Exception {
new DaoTemplate().generateAll(args[0]);
}


完之后就会在../app/src-gen/greendao目录下面生成一些文件,当然前提是要保证这个目录在执行templategenerator module 之前是存在。 这样templategenerator module的功能就结束了(写的非常简单,一些具体的东西可以去google下)。

app module:这个才是我们主要关注的module,要在这个工程里面对数据库进行操作。首先是../app/src-gen/greendao目录,在app目录下面新建src-gen/greendao 文件夹。gradle设置。

sourceSets {
main {
java.srcDirs = ['src', 'src-gen']
}
}


依赖库

compile 'de.greenrobot:greendao:1.3.7'


在application 中获取 private DaoSession mDaoSession 全局使用; DaoSession类是代码自动生成的。

private void setupDatabase() {
DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, "gsmartrouter-mobile.db", null);
SQLiteDatabase db = helper.getWritableDatabase();
DaoMaster daoMaster = new DaoMaster(db);
mDaoSession = daoMaster.newSession();
}

public DaoSession getDaoSession() {
return mDaoSession;
}


然后就是具体的操作了,对于每个表我们一般都会对应一个class如图



在对应的表的class里面写相应的数据库的操作,具体的可以看下class文件里面的内容,网上也有很多greenDAO数据库增删改查的例子,仿照来写就可以了。

具体调用

private void saveInDatabase() {
Task.callInBackground(new Callable<Void>() {
@Override
public Void call() throws Exception {
/** save info to database */
User user = new User("abc", "abc", false);
UserRepository.insertOrUpdate(mContext, user);
return null;
}
});
}

private void readFromDatabase() {
Task.callInBackground(new Callable<Void>() {
@Override
public Void call() throws Exception {
/** read info from database */
List<User> list = UserRepository.getAll(mContext);
Log.d("vae_tag", list.size() + "  = size");
return null;
}
});
}


就简单的调用了插入和读取。主要是

User user = new User("abc", "abc", false);
UserRepository.insertOrUpdate(mContext, user);




List<User> list = UserRepository.getAll(mContext);
Log.d("vae_tag", list.size() + "  = size");


使用的时候要先运行templategenerator module让自动生成对应的代码。运行方法如图。



然后就随便你怎么操作了。用同样的方式可以很方便的运用到大家的项目当中去。

写的比较乱,但还是希望能在大家在不知道greenDAO如何使用的时候起到入门的作用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: