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, "./");
}

生成类文件的路径说明: 类文件所在的路径 = 指定根目录 + 指定包名

生成成功的话,控制台有打印信息

项目中引用

  1. 在项目工程中,添加greenDao在项目中所用的jar包

     compile 'org.greenrobot:greendao:2.2.0'
    
  2. 所生成类的引用. 所生成类的引用, 有两种方式:

    1. 添加generator工程为module依赖(生成类所在路径应generator工程的src目录下)

       compile project(':greendaogenerator')
      
    2. 直接将生成的类文件,拷入到工程中

操作示例(插入/查询)

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);

posted @ 2016-06-10 23:15  就一俗人  阅读(319)  评论(0)    收藏  举报