GreenDao 使用
目录结构:
-
关于GreenDao
-
集成步骤
2.1 下载配置 [GREENDAO GENERATOR]
2.2 定义表的结构
2.3 生成工程
-
如何使用
3.1 配置gradle
3.2 Coding
-
Demo
-
最后
正文:
1. 关于GreenDao
DAO CODE GENERATION PROJECT
更详细描述信息可以到[官网]查看
2. 集成步骤
2.1 下载配置 [GREENDAO GENERATOR]
首先,打开一个需要集成的工程。为了演示需要,我在这里创建了一个新的工程:
Application name可以随意起
好了,一个干净的工程创建完成。我们来看看,greenDao更新到哪个版本了:
这个是官方的Git Repo【传送门】,这里有demo和generator等工程。
回到刚才创建的那个新工程,这里面先创建一个目录,用来存放GreenDao生成的文件:
切换成Projects模式,才能看到这个红色框起来的选项。
完成之后,我们接下来的操作。
以模块方式引用Generator
创建一个新的模块
空的java library
这里工程名,我写的是GreenDaoLib。
创建完成了。再配置工程里的 build.gradle,添加 dependencies.
因为generator最新的版本是2.2.0(刚才的官方Git Repo地址打开可以看到)
我们将
compile 'org.greenrobot:greendao-generator:2.2.0'
添加到刚才java library那个工程的build.gradle中:
compile 'org.greenrobot:greendao-generator:2.2.0'
到这里,我们的配置工作已经完成一半了,现在需要去定义一下数据库的基本信息,
而这个信息,需要根据项目使用的数据项有关。实际上,generator是将对象翻译成一个一套接口的这么个工具,那么我们现在需要去编写相应的java 对象。
2.2 定义表的结构
这里分三步:
- 首先:
我们需要创建一个Schema, - 然后:
package com.example;
import de.greenrobot.daogenerator.DaoGenerator;
import de.greenrobot.daogenerator.Entity;
import de.greenrobot.daogenerator.Schema;
public class DemoGenerator {
public static void main(String[] args) throws Exception {
//step 1:
Schema schema = new Schema(100, "charles.nocompany.greendao");
//step 2:
addTest(schema);
//step 3:
new DaoGenerator().generateAll(schema,"./app/src/main/java-gen");
}
private static void addTest(Schema schema) {
Entity testTable = schema.addEntity("TestTable");
testTable.addIdProperty().primaryKey().autoincrement();
testTable.addStringProperty("text").notNull();
testTable.addStringProperty("comment");
testTable.addDateProperty("date");
}}
- 最后:
设置一下输出的路径(刚才我们在java的同级目录下创建了一个java-gen的目录,
那么这里的generateAll的第二参数就设置到那里去"./app/src/main/java-gen")
2.3 生成工程
可以看到,我们将OutPut 设置到之前那个Java-gen的目录下:
newDaoGenerator().generateAll(schema,"./app/src/main/java-gen");
最后会在我们设置的output目录下生成:
DaoMaster、DaoSession、TestTableDao、TestTable
4个文件
这几个类,就是我们将在工程中使用的东西。
问:如果一个项目中有个表,怎么办?
答:再创建一个addXXX的函数如addTest那样,定义属性,重新生成一次。
3.如何使用
3.1配置gradle
首先,回到我们之前创建的那个Demo工程
设置一下build.gradle文件
需要修改sourceset 和dependencies
apply plugin: 'com.android.application'android {
compileSdkVersion 24
buildToolsVersion "23.0.3"
defaultConfig {
applicationId "com.nocompany.touc.demogreendao"
minSdkVersion 22
targetSdkVersion 24
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
sourceSets {
main {
java.srcDirs = ['src/main/java', 'src/main/java-gen']
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:24.0.0'
compile 'org.greenrobot:greendao:2.2.1'
}
3.2 Coding
好了,所有准备工作都做好了,现在开始使用GreenDao了。
1. 编写Actitvity&XML文件
这里需要三个文件,一个用来显示的Activity,和两个XML文件。
Paste_Image.png Paste_Image.png2. 数据库部分代码:
private void setupDatabase() {
DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, "testTable_db", null);
db = helper.getWritableDatabase();
daoMaster = new DaoMaster(db);
daoSession = daoMaster.newSession();
}
3.增、删、改、查
String str=inputEditText.getText().toString().trim();
String comment="comment";
TestTable table1= new TestTable(null,str,comment,new Date());
daoSession.getTestTableDao().insert(table1);
DeleteQuery deleteQuery=daoSession.getTestTableDao().queryBuilder()
.where(TestTableDao.Properties.Id.gt(0))
.buildDelete();
deleteQuery.executeDeleteWithoutDetachingEntities();
String comment="comment2";
String str=inputEditText.getText().toString().trim();
Query query = daoSession.getTestTableDao().queryBuilder()
.where(TestTableDao.Properties.Text.eq(str))
.orderAsc(TestTableDao.Properties.Date)
.build();
List<TestTable> list = query.list();
TestTable table1 = list.get(0);
table1.setComment(comment);
daoSession.getTestTableDao().update(table1);
Query query = daoSession.getTestTableDao().queryBuilder()
.where(TestTableDao.Properties.Text.eq(str))
.orderAsc(TestTableDao.Properties.Date)
.build();
List<testTable> list = query.list();
4.Demo
GIF.gif5.最后
官方介绍:http://greenrobot.org/greendao/documentation//introduction/
官方repo:https://github.com/greenrobot/greenDAO