greenDao简易上手说明
概念概述
greenDao是一个开源的ORM框架(将数据库的表与java对象建立映射关系),对底层数据库的操作(CRUD)进行了封装,免除了开发人员编写sql的麻烦.

引入步骤
使用greenDao, 需事先成操作数据库的相关类(后期操作数据库时,就通过这些类进行操作).

生成4种java类
Entity: 数据库表单行的实例对象,表示数据库的一行
Dao: 实际生成的某某DAO类,通常对应具体的java类,比如NoteDao等。其有更多的权限和方法来操作数据库元素
DaoSession:会话层。操作具体的DAO对象(注意:是对象),比如各种getter方法
DaoMaster:保存了sqlitedatebase对象以及操作DAO classes(注意:不是对象)。其提供了一些创建和删除table的静态方法,其内部类OpenHelper和DevOpenHelper实现了SQLiteOpenHelper并创建数据库的框架
一段插入一行数据的操作的代码:
DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(getApplicationContext(), "notes_db", null);
SQLiteDatabase database = helper.getWritableDatabase();
DaoMaster daoMaster = new DaoMaster(database);
DaoSession daoSession = daoMaster.newSession();
NoteDao noteDao = daoSession.getNoteDao();
Note note = new Note((long) 99, "test 99", "comment 99", new Date());
noteDao.insert(note);
生成相关类
创建generator工程(纯Java类工程), 通过代码生成相关类, 本说明所用IDE为Android Studio.
1. 引入generator工程所需的jar包:
greenDao-generator.jar
//在此工程的build.gradle脚本中,添加下方依赖,则可引入generator工程所需的jar包
dependencies {
compile 'org.greenrobot:greendao-generator:2.2.0' //版本以官网为准
}
2. 执行生成代码
main方法中执行如下代码,则可生成相关类的生成
public static void main(String[] args) throws Exception {
//创建schma, 需指定数据库的版本version, 生成文件所在包的包名
Schema schema = new Schema(version, "de.greenrobot.daoexample");
//创建添加实例note,此实例于数据库的表会形成映射关系
Entity note = schema.addEntity("Note");
//为实例创建属性,对应的,note表创建对应的表头
note.addIdProperty();
note.addStringProperty("test").notNull();
note.addStringProperty("commemt");
note.addDateProperty("date");
//同上,创建表格映射实例,并添加属性
Entity book = schema.addEntity("Book");
book.addIdProperty();
book.addStringProperty("name");
book.addFloatProperty("price");
//执行相关类的生成,需指定生成的类所在的根目录,路径若不存在,会抛异常
new DaoGenerator().generateAll(schema, "./");
}
生成类文件的路径说明: 类文件所在的路径 = 指定根目录 + 指定包名
生成成功的话,控制台有打印信息

项目中引用
-
在项目工程中,添加greenDao在项目中所用的jar包
compile 'org.greenrobot:greendao:2.2.0' -
所生成类的引用. 所生成类的引用, 有两种方式:
-
添加generator工程为module依赖(生成类所在路径应generator工程的src目录下)
![]()
compile project(':greendaogenerator') -
直接将生成的类文件,拷入到工程中
![]()
-
操作示例(插入/查询)
CRUD:
noteDao.insert(note); //增
noteDao.delete(note); //删
noteDao.update(note); //改
List
noteList = noteDao.queryBuilder().list(); //查
//创建数据库note_db(若不存在,则新创建)
DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(getApplicationContext(), "notes_db", null);
SQLiteDatabase database = helper.getWritableDatabase();
//创建会话session
DaoMaster daoMaster = new DaoMaster(database);
DaoSession daoSession = daoMaster.newSession();
//通过session, 获取各entity的dao对象
NoteDao noteDao = daoSession.getNoteDao();
BookDao bookDao = daoSession.getBookDao();
//借助entity所对应的dao, 执行插入数据操作
noteDao.insert(new Note((long) 99, "test 99", "comment 99", new Date()));
noteDao.insert(new Note((long) 88, "test 88", "comment 88", new Date()));
noteDao.insert(new Note((long) 77, "test 77", "comment 77", new Date()));
noteDao.insert(new Note((long) 66, "test 66", "comment 66", new Date()));
noteDao.insert(new Note((long) 55, "test 55", "comment 55", new Date()));
bookDao.insert(new Book((long) 11, "book 11 ", 9.9f));
bookDao.insert(new Book((long) 22, "book 22 ", 9.9f));
bookDao.insert(new Book((long) 33, "book 33 ", 9.9f));
bookDao.insert(new Book((long) 44, "book 44 ", 9.9f));
//查询,结果以list返回
List<Book> bookList = bookDao.queryBuilder().list();
List<Note> list = noteDao.queryBuilder()
.where(NoteDao.Properties.Id.between(70, 90))
.list();
Log.d(TAG, "onCreate: " + list);
Log.d(TAG, "onCreate: " + noteList);


浙公网安备 33010602011771号