greenDAO 基本使用
greenDAO是一个可以帮助Android开发者快速将Java对象映射到SQLite数据库的表单中的ORM解决方案。 greenDAO主要特点:
- 最大性能(最快的Android ORM)
- 易于使用
- 高度优化
- 最小内存优化
greenDAO的使用需先让java项目生成DAO文件,android使用生成的DAO文件操作数据库。 下面是greenDAO具体在Android stdio中的使用步骤
- 系统环境:win10
- 开发软件:Android stdio 2.2 Preview 3
greenDao相关:
-
首先创建一个项目:
![]()
-
查阅官方问档得知Android中使用需先生成DAO文件。DAO文件的生成需指定目录则先在Android包内创建目录文件。
![]()
将文件目录在 build.gradle/app中配置
sourceSets {
main {
java.srcDirs = ['src/main/java', 'src/main/java-dao']
}
}
并导入:
compile 'org.greenrobot:greendao:2.2.1'
可以从Github导入最新版本
创建Java Library
在build.gradle/greenlib中配置:
compile 'org.greenrobot:greendao-generator:2.2.0'
编写ExampleDaoGenerator 类
public class ExampleDaoGenerator {
public static void main(String[] args) throws Exception {
// 正如你所见的,你创建了一个用于添加实体(Entity)的模式(Schema)对象。
// 两个参数分别代表:数据库版本号与自动生成代码的包路径。
Schema schema = new Schema(1, "com.greenDAOTest.greendao");
// 当然,如果你愿意,你也可以分别指定生成的 Bean 与 DAO 类所在的目录,只要如下所示:
// Schema schema = new Schema(1, "me.itangqi.bean");
// schema.setDefaultJavaPackageDao("me.itangqi.dao");
// 模式(Schema)同时也拥有两个默认的 flags,分别用来标示 entity 是否是 activie 以及是否使用 keep sections。
// schema2.enableActiveEntitiesByDefault();
// schema2.enableKeepSectionsByDefault();
// 一旦你拥有了一个 Schema 对象后,你便可以使用它添加实体(Entities)了。
addNote(schema);
// 最后我们将使用 DAOGenerator 类的 generateAll() 方法自动生成代码,此处你需要根据自己的情况更改输出目录(既之前创建的 java-gen)。
// 其实,输出目录的路径可以在 build.gradle 中设置,有兴趣的朋友可以自行搜索,这里就不再详解。
new DaoGenerator().generateAll(schema, "../greenDAOTest/app/src/main/java-dao");
}
/**
* @param schema
*/
private static void addNote(Schema schema) {
// 一个实体(类)就关联到数据库中的一张表,此处表名为「Note」(既类名)
Entity note = schema.addEntity("Note");
// 你也可以重新给表命名
// note.setTableName("NODE");
// greenDAO 会自动根据实体类的属性值来创建表字段,并赋予默认值
// 接下来你便可以设置表中的字段:
note.addIdProperty();
note.addStringProperty("text").notNull();
// 与在 Java 中使用驼峰命名法不同,默认数据库中的命名是使用大写和下划线来分割单词的。
// For example, a property called “creationDate” will become a database column “CREATION_DATE”.
note.addStringProperty("comment");
note.addDateProperty("date");
}
}
运行类打印一下信息表示成功
同时在java包下出项一下目录结构
至此完成所有基本部署。
代码解析。
首先来看ExampleDaoGenerator.java文件。其中有两个方法,一个是main()方法,为程序入口。 在main()首先创建Schema实例,注意为de.greenrobot.daogenerator.Schema。为模式对象:
// 两个参数分别代表:数据库版本号与自动生成代码的包路径。
Schema schema = new Schema(1, "com.greenDAOTest.greendao");
第二个方法addNote(schema)方法为自写方法,在其中添加表至schema。需要用到de.greenrobot.daogenerator.Entity类。通过此类可以在不使用SQL语句前提下创建表、表约束、键值。带,代码如下:
private static void addNote(Schema schema) {
// 一个实体(类)就关联到数据库中的一张表,此处表名为「Note」(既类名)
Entity note = schema.addEntity("Note");
// 你也可以重新给表命名
// note.setTableName("NODE");
// greenDAO 会自动根据实体类的属性值来创建表字段,并赋予默认值
// 接下来你便可以设置表中的字段:
note.addIdProperty(); //ID字段可以自增长
//一下为基本类型字段
note.addBooleanProperty("NoteBoolean");
note.addStringProperty("text").notNull(); //添加非空约束
note.addStringProperty("comment");
note.addDateProperty("date");
}
最后创建:
// 最后我们将使用 DAOGenerator 类的 generateAll() 方法自动生成代码,此处你需要根据自己的情况更改输出目录(既之前创建的 java-dao)。
new DaoGenerator().generateAll(schema, "../greenDAOTest/app/src/main/java-dao");
OK 现在我们已经生成了所有操作文件,下面就是在Android项目中的具体应用。 首先我们认识下生成的四个文件,有一张图表示其关系:
- DaoMaster:它提供操作了
DaoSession方法,其内部类OpenHelper和DevOpenHelper实现了SQLiteOpenHelper并创建数据库的框架。 - DaoSession:会话层,操作具体的DAO对象,比如
getXXX()方法。 - xxxDao:实际生成的表对象DAO类,通常对应具体的类,其有更多的权限和方法来操作数据库元素。创建表、添加数据、删除数据、查询等。
- xxxEntity:持久的实体对象,于表对应的相关类。
代码:
private void initDataBase() {
//1.通过 DaoMaster.DevOpenHelper 内部类创建数据库并获取 SQLiteDatabase
DaoMaster.DevOpenHelper devOpenHelper = new DaoMaster.DevOpenHelper(this, "notes-db", null);
SQLiteDatabase database = devOpenHelper.getWritableDatabase();
//2.通过获取到的 SQLiteDatabase 创建 DaoMaster
DaoMaster daoMaster = new DaoMaster(database);
//3.通过 DaoMaster 获得 DaoSession
DaoSession daoSession = daoMaster.newSession();
//4.通过 daoSession 获得对应表的 NoteDao
NoteDao noteDao = daoSession.getNoteDao();
}
这时我们就可以真正对数据进行操作了:
//查询
String textColumn = NoteDao.Properties.Text.columnName; //注:内部类Properties为表映射的元数据。
String orderBy = textColumn + " COLLATE LOCALIZED ASC";
Cursor cursor = database.query(noteDao.getTablename(), noteDao.getAllColumns(), null, null, null, null, orderBy);
//添加
Note note = new Note(1L, "one", null, new Date());
noteDao.insert(note);
//删除
noteDao.deleteByKey(1L);//要删除的行的ID
//改变
noteDao.update(new Note(1L,"two",null,new Date()));



将文件目录在 build.gradle/app中配置
浙公网安备 33010602011771号