之前,android的数据库部分,自己一直傻傻地按照最原始的方式:写一个类比如MyDbHelper去继承SQLiteOpenHelper,然后建库,建表,建字段,然后再创建一个类MyDbDao去实现操作数据库的增删改查的方法。
直到在博客上看到大牛写的 LitePal 的使用,才发现原来数据库部分可以这么简化。LitePal的详细地使用可以参考 http://blog.csdn.net/guolin_blog/article/details/38083103 一共九篇,分析讲解得很详细。
后来,发现除了LitePal, 另一个开源的框架 greenDao。在github上比LitePal还要火。所以今天就整理一下greenDao的具体的使用。
greenDao的github下载地址:https://github.com/greenrobot/greenDAO
greenDao的官网:http://greendao-orm.com/
下面是官网给出的greenDao的一些特性
Object/relation mapping (ORM) (对象关系映射)
Performance (性能 高)
Slim library (资源库小 不到100k)
Code generation (代码生成)
…
来看它给出的 DaoExample 示例
1. 创建表
new DaoMaster.DevOpenHelper(this, "notes.db", null);
这里使用DaoMaster这个类可以很方便地获得一个SQLiteOpenHelper,只需传入数据库的表名,就可以帮我们自动创建好数据库了,省去了自己写SQL语句。
2. 插入和删除
daoMaster = new DaoMaster(db);
daoSession = daoMaster.newSession();
noteDao = daoSession.getNoteDao();
Note note = new Note(null, noteText, comment, new Date());
noteDao.insert(note);
Log.d("DaoExample", "Inserted new note, ID: " + note.getId());
这里只要创建一个Note对象,并在Dao调用插入方法时传入就算完成了。而且,插入完成时,插入的note的数据库id 就是 这个note对象的id。
noteDao.deleteByKey(id);
删除操作也很直接,就这么一句。
3. 数据模型 和 代码生成
为了创建实体更好的扩展note,我们看下DaoExampleGenerator这个示例,它只有一个类,里面定义了数据模型:
Schema schema = new Schema(1, "de.greenrobot.daoexample");
Entity note= schema.addEntity("Note");
note.addIdProperty();
note.addStringProperty("text").notNull();
note.addStringProperty("comment");
note.addDateProperty("date");
new DaoGenerator().generateAll(schema, "../DaoExample/src-gen");
可以看出,创建的Schema对象,可以来添加实体,并且这个实体与数据库的表有关联,同时,一个实体包含多个属性,这与数据库的列名相互映射。
一旦schema完全定义完成,就可以触发代码生成了,前面的Note.java、noteDao.java 和 DaoMaster.java等文件就是这样来的。
1. 基本概念
greenDAO 是android平台的一个对象关系映射的工具。它为关系型数据库提供了一个面向对象的接口。像greenDao这样的ORM工具,能为我们提供很简单的数据接口 并且 做很多重复的任务。
2. Dao编码生成项目
要在android项目中使用greenDao,最好将自动生成的工程(普通的Java Project)放在一个独立的文件夹中,目的是好与你本身的项目区分开来。
一旦生成了代码,就可以使用greenDao了,不要忘记在项目中引入greenDao的核心库(greenDao.jar)。
下面是greenDao的几个基本接口的核心类:
DaoMaster:里面有静态的方法来创建或删除表。它是greenDao的入口,掌握这数据库并管理着特定模式的DAO类。
DaoSession:管理着所有可以获取到的特定模式的DAO对象,可以通过get方法获取。DaoSession也提供了一些基本的实体增删改查操作的持久化的方法。
DAOs:每一个实体,都会生成一个DAO,并且有更多的持久化的方法。
Entities:就像JavaBean,通常,是代表使用标准Java属性的数据库的一行。
4. 核心的初始化
helper = new DaoMaster.DevOpenHelper(this, "notes.db", null);
db = helper.getWritableDatabase();
daoMaster = new DaoMaster(db);
daoSession = daoMaster.newSession();
noteDao = daoSession.getNoteDao();
1. Schema:
Schema schema = new Schema(1, "de.greenrobot.daoexample");
schema是你定义的第一个对象,参数1是schema的版本,参数2是默认的包名(实体、DAOs、Junit测试用的包名)。
也可以为DAO 和 test类选择不同的包名:
schema.setDefaultJavaPackageTest("de.greenrobot.daoexample.test");
schema.setDefaultJavaPackageDao("de.greenrobot.daoexample.dao");
2:Entities:
Entity user = schema.addEntity("User");
schema有了之后,就可以添加entities了,并且可以改变一些设置,最重要的是,可以增加一些属性到实体上。
user.addIdProperty();
user.addStringProperty("name");
user.addStringProperty("password");
user.addIntProperty("yearOfBirth");
好了,这里只是简单地整理了一下greenDao的相关知识,不够全面,大家可以去它的官网上仔细阅读文档。能做的demo验证验证就更好不过了。