GreenDao在github上的地址: https://github.com/greenrobot/greenDAO
首先你需要关注两个Project:DaoExample和DaoExampleGenerator。
DaoExample是一个Android项目,导入之后发现DaoExample能够直接运行,直接运行一发,是个记笔记的简单样例,你可以通过输入来新建一个笔记,可以通过点击笔记来删除它。
DaoExampleGenerator是一个java项目,选择General的导入方式,导入之后发现有错。这是由于项目缺少两个jar包,在网上下载freemarker.jar和greendao-generator.jar,拖入项目,然后加入build path就可以了。
我们来看DaoExample的源码,咦,有个src-gen的文件夹,那我们进入这个文件夹,gen,顾名思义,这是auto-generated的,是通过DaoExampleGenerator预先生成的代码:
Note.java包含了一份笔记的所有信息
NoteDao.java为你提供了处理笔记的接口
DaoMaster.java,看到master,就感觉知道一半意思了,它保存了sqlite数据库对象,提供一些创建删除表的静态方法,内部类OpenHelper和DevOpenHelper实现了SQLiteOpenHelper并创建数据库的框架,提供创建新绘会话的方法。
DaoSession.java,看到session,也大概知道一半了,就是会话嘛,提供了获取所有自动生成的表的方法(如Note)
看完这个,我们再来看src文件夹下的源码,
只有一个主Activity:NoteActivity
在onCreate方法中,通过一系列的操作,获取了noteDao,也就是note这张表的操作接口:
首先说明,这里使用了DevOpenHelper来获取SQLiteOpenHelper,看DaoMaster中,上面有一行字:
啥意思呢,这是一个警告(好吧,不是BUG也看一看吧)就是数据库升级的时候会删除所有的表,在开发的时候用用就可以了,至于什么怎样升级数据库一会儿再说。
第二个参数notes-db是获取的数据库名,这只是一个标识符。
第二行和第三行用于创建DaoMaster,如果你不想直接操作数据库,可以不用第二行,直接
daoMaster = new DaoMaster(helper.getWritableDatabase());
这里后面有用到对sqlite的直接操作,所以存储了db对象。
第四行,获取一个session,在我们实际的工程中,最好不要每次要操作数据库都获取一个session,而是在应用开始的时候通过静态方法获取一个session,官方答疑中也是这样说的(我也不知道怎样关闭一个session)。
第五行获取note这个表的操作接口。
我们来看怎样来插入一个note,addNote函数的两句话完成了这个操作:
创建一个新的note,第一个是自增的id,所以null,第二个是笔记内容,第三个是comment,第四个是当前时间。
然后通过noteDao进行insert操作,就完成了插入。插入了之后你还可以通过note.getId()来获取刚才插入前传参是null的那个id。
我们再来看看如何删除一个note,onListItemClick中一句话完成了这个操作
当然还有很多删除的方法。可以自己通过自动填充来看有哪些方法,或者查阅官方文档。
还有src-test文件夹,自己看着玩吧~
我们再来看DaoExampleGenerator,来看看DaoExample里面src-gen是如何生成的。
首先run as java application来运行一下看看(选择ExampleDapGenertor启动),然后我们在Console中发现:
这里要注意,在以后我们自己创建Generator的时候,要实现在Android Application里面创建src-gen文件夹(不然运行这个Generator会报错),并且把它加入源码编译(这个都懂的)。
源码只有ExampleDaoGenerator.java这一个文件,打开看看:
创建了一个Schema(这是啥我也不知道,官方说,如你所见,你创建了一个Schema对象,可以用来增加实体,我觉得是增加表吧),然后两个参数,第一个参数是version,就是数据库的版本号,这在之前提到了,如果更换版本号,重新生成src-gen,然后用到了前面说的DevOpenHelper,会把之前的表全部删除。第二个参数是生成的包名。就是在src-gen文件夹下的包名。
然后addNote:
创建一个表,名字叫Note,然后添加Id,添加text要非空,添加comment,添加Date,这样我们就生成了Note.java和NoteDao.java。然后:
这就是包存放的相对路径了。
至此,GreenDao依然入门。
首先你需要关注两个Project:DaoExample和DaoExampleGenerator。
DaoExample是一个Android项目,导入之后发现DaoExample能够直接运行,直接运行一发,是个记笔记的简单样例,你可以通过输入来新建一个笔记,可以通过点击笔记来删除它。
DaoExampleGenerator是一个java项目,选择General的导入方式,导入之后发现有错。这是由于项目缺少两个jar包,在网上下载freemarker.jar和greendao-generator.jar,拖入项目,然后加入build path就可以了。
我们来看DaoExample的源码,咦,有个src-gen的文件夹,那我们进入这个文件夹,gen,顾名思义,这是auto-generated的,是通过DaoExampleGenerator预先生成的代码:
Note.java包含了一份笔记的所有信息
NoteDao.java为你提供了处理笔记的接口
DaoMaster.java,看到master,就感觉知道一半意思了,它保存了sqlite数据库对象,提供一些创建删除表的静态方法,内部类OpenHelper和DevOpenHelper实现了SQLiteOpenHelper并创建数据库的框架,提供创建新绘会话的方法。
DaoSession.java,看到session,也大概知道一半了,就是会话嘛,提供了获取所有自动生成的表的方法(如Note)
看完这个,我们再来看src文件夹下的源码,
只有一个主Activity:NoteActivity
在onCreate方法中,通过一系列的操作,获取了noteDao,也就是note这张表的操作接口:
- DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, "notes-db", null);
- db = helper.getWritableDatabase();
- daoMaster = new DaoMaster(db);
- daoSession = daoMaster.newSession();
- noteDao = daoSession.getNoteDao();
- /** WARNING: Drops all table on Upgrade! Use only during development. */
第二个参数notes-db是获取的数据库名,这只是一个标识符。
第二行和第三行用于创建DaoMaster,如果你不想直接操作数据库,可以不用第二行,直接
daoMaster = new DaoMaster(helper.getWritableDatabase());
这里后面有用到对sqlite的直接操作,所以存储了db对象。
第四行,获取一个session,在我们实际的工程中,最好不要每次要操作数据库都获取一个session,而是在应用开始的时候通过静态方法获取一个session,官方答疑中也是这样说的(我也不知道怎样关闭一个session)。
第五行获取note这个表的操作接口。
我们来看怎样来插入一个note,addNote函数的两句话完成了这个操作:
- Note note = new Note(null, noteText, comment, new Date());
- noteDao.insert(note);
然后通过noteDao进行insert操作,就完成了插入。插入了之后你还可以通过note.getId()来获取刚才插入前传参是null的那个id。
我们再来看看如何删除一个note,onListItemClick中一句话完成了这个操作
- noteDao.deleteByKey(id);
还有src-test文件夹,自己看着玩吧~
我们再来看DaoExampleGenerator,来看看DaoExample里面src-gen是如何生成的。
首先run as java application来运行一下看看(选择ExampleDapGenertor启动),然后我们在Console中发现:
- Written *\greenDAO-master\DaoExample\src-gen\de\greenrobot\daoexample\NoteDao.java
- Written *\greenDAO-master\DaoExample\src-gen\de\greenrobot\daoexample\Note.java
- Written *\greenDAO-master\DaoExample\src-gen\de\greenrobot\daoexample\CustomerDao.java
- Written *\greenDAO-master\DaoExample\src-gen\de\greenrobot\daoexample\Customer.java
- Written *\greenDAO-master\DaoExample\src-gen\de\greenrobot\daoexample\OrderDao.java
- Written *\greenDAO-master\DaoExample\src-gen\de\greenrobot\daoexample\Order.java
- Written *\greenDAO-master\DaoExample\src-gen\de\greenrobot\daoexample\DaoMaster.java
- Written *\greenDAO-master\DaoExample\src-gen\de\greenrobot\daoexample\DaoSession.java
源码只有ExampleDaoGenerator.java这一个文件,打开看看:
- Schema schema = new Schema(1000, "de.greenrobot.daoexample");
然后addNote:
- Entity note = schema.addEntity("Note");
- note.addIdProperty();
- note.addStringProperty("text").notNull();
- note.addStringProperty("comment");
- note.addDateProperty("date");
- new DaoGenerator().generateAll(schema, "../DaoExample/src-gen");
至此,GreenDao依然入门。