GreenDao讲义1:带你阅读github的example

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这张表的操作接口:
[java]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. DevOpenHelper helper = new DaoMaster.DevOpenHelper(this"notes-db"null);  
  2. db = helper.getWritableDatabase();  
  3. daoMaster = new DaoMaster(db);  
  4. daoSession = daoMaster.newSession();  
  5. noteDao = daoSession.getNoteDao();  
首先说明,这里使用了DevOpenHelper来获取SQLiteOpenHelper,看DaoMaster中,上面有一行字:
[java]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. /** WARNING: Drops all table on Upgrade! Use only during development. */  
啥意思呢,这是一个警告(好吧,不是BUG也看一看吧)就是数据库升级的时候会删除所有的表,在开发的时候用用就可以了,至于什么怎样升级数据库一会儿再说。
第二个参数notes-db是获取的数据库名,这只是一个标识符。
第二行和第三行用于创建DaoMaster,如果你不想直接操作数据库,可以不用第二行,直接
daoMaster = new DaoMaster(helper.getWritableDatabase());
这里后面有用到对sqlite的直接操作,所以存储了db对象。
第四行,获取一个session,在我们实际的工程中,最好不要每次要操作数据库都获取一个session,而是在应用开始的时候通过静态方法获取一个session,官方答疑中也是这样说的(我也不知道怎样关闭一个session)。
第五行获取note这个表的操作接口。
我们来看怎样来插入一个note,addNote函数的两句话完成了这个操作:
[java]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. Note note = new Note(null, noteText, comment, new Date());  
  2. noteDao.insert(note);  
创建一个新的note,第一个是自增的id,所以null,第二个是笔记内容,第三个是comment,第四个是当前时间。
然后通过noteDao进行insert操作,就完成了插入。插入了之后你还可以通过note.getId()来获取刚才插入前传参是null的那个id。
我们再来看看如何删除一个note,onListItemClick中一句话完成了这个操作
[java]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. noteDao.deleteByKey(id);  
当然还有很多删除的方法。可以自己通过自动填充来看有哪些方法,或者查阅官方文档。
还有src-test文件夹,自己看着玩吧~


我们再来看DaoExampleGenerator,来看看DaoExample里面src-gen是如何生成的。
首先run as java application来运行一下看看(选择ExampleDapGenertor启动),然后我们在Console中发现:
[java]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. Written *\greenDAO-master\DaoExample\src-gen\de\greenrobot\daoexample\NoteDao.java  
  2. Written *\greenDAO-master\DaoExample\src-gen\de\greenrobot\daoexample\Note.java  
  3. Written *\greenDAO-master\DaoExample\src-gen\de\greenrobot\daoexample\CustomerDao.java  
  4. Written *\greenDAO-master\DaoExample\src-gen\de\greenrobot\daoexample\Customer.java  
  5. Written *\greenDAO-master\DaoExample\src-gen\de\greenrobot\daoexample\OrderDao.java  
  6. Written *\greenDAO-master\DaoExample\src-gen\de\greenrobot\daoexample\Order.java  
  7. Written *\greenDAO-master\DaoExample\src-gen\de\greenrobot\daoexample\DaoMaster.java  
  8. Written *\greenDAO-master\DaoExample\src-gen\de\greenrobot\daoexample\DaoSession.java  
这里要注意,在以后我们自己创建Generator的时候,要实现在Android Application里面创建src-gen文件夹(不然运行这个Generator会报错),并且把它加入源码编译(这个都懂的)。
源码只有ExampleDaoGenerator.java这一个文件,打开看看:
[java]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. Schema schema = new Schema(1000"de.greenrobot.daoexample");  
创建了一个Schema(这是啥我也不知道,官方说,如你所见,你创建了一个Schema对象,可以用来增加实体,我觉得是增加表吧),然后两个参数,第一个参数是version,就是数据库的版本号,这在之前提到了,如果更换版本号,重新生成src-gen,然后用到了前面说的DevOpenHelper,会把之前的表全部删除。第二个参数是生成的包名。就是在src-gen文件夹下的包名。
然后addNote:
[java]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. Entity note = schema.addEntity("Note");  
  2. note.addIdProperty();  
  3. note.addStringProperty("text").notNull();  
  4. note.addStringProperty("comment");  
  5. note.addDateProperty("date");  
创建一个表,名字叫Note,然后添加Id,添加text要非空,添加comment,添加Date,这样我们就生成了Note.java和NoteDao.java。然后:
[java]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. new DaoGenerator().generateAll(schema, "../DaoExample/src-gen");  
这就是包存放的相对路径了。
至此,GreenDao依然入门。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值