您的位置:首页 > 移动开发 > Android开发

Android ORM框架 greenDao使用

2016-04-08 16:47 651 查看

前言:

开发过程中,总会进行数据存储操作。当文件不能满足需求时,就会使用SQLite进行存储。于是就有很多ORM框架出现。在这里自己选择使用greenDao作为项目的数据库框架。greenDao在所有的Android数据库ORM开源框架中效率最高,官网这么描述:probably the fastest ORM for Android.

但是greenDao学习曲线并不如其他的框架那么简单,也算是有长有短。这篇文章就是自己使用greenDao过程中的笔记和总结。主要是大量看官方文档,它的官方文档比几个月前写的好太多,而且很清晰,很容易就看懂了。

greenDaode的特点:

Maximum performance (probably the fastest ORM for Android)

性能最优化

Easy to use but powerful APIs covering relations and joins

易用性高,API方便

Minimal memory consumption

占用内存最小化

Small library size to keep your build times low and to avoid the 65k method limit

greenDao库小

使用方法:

1. 添加依赖

在Android app项目中

添加依赖: compile ‘de.greenrobot:greendao:2.1.0’

创建 Java Libray

添加依赖: compile ‘de.greenrobot:greendao-generator:2.1.0’

2. 创建java-gen目录

在Android app中的 src/main目录下创建 java-gen目录,用于存放greenDao生成的文件。

并在build.gradle中添加sourceSets。

android {
...

//添加sourceSets,将创建的java-gen添加进来。
sourceSets {
main {
java.srcDirs = ['src/main/java', 'src/main/java-gen']
}
}
}


3. 编写Java实体类,生成代码

public class MyClass {
public static void main(String[] args) throws Exception {

//创建Schema模式对象
//两个参数, 数据库版本号 与 自动生成代码的包路径
Schema schema = new Schema(1, "baiiu.greendao.gen");

//添加实体
addEntity(schema);

//生成代码.使用相对路径
new DaoGenerator().generateAll(schema,"../ZhihuDaily/app/src/main/java-gen");
}

//添加实体类
private static void addEntity(Schema schema) {
//创建实体类,Person表明创建Person表
Entity topStory = schema.addEntity("Person");

topStory.addIdProperty();
topStory.addStringProperty("name");
topStory.addStringProperty("age");

}
}


编写完数据存储对象后,run该main()方法,就会在指定路径下生成响应的类。

关于更多定义Entity介绍,请看官网,讲的真的很详细。modelling-entities

4. greenDao生成核心类介绍

DaoMaster:

The entry point for using greenDAO. DaoMaster holds the database object (SQLiteDatabase) and manages * DAO classes (not objects) for a specific schema.*

使用greenDao的入口。该类持有SQLiteDatabase对象并管理生成的实体类对象.class。

DaoSession:

Manages all available DAO objects for a specific schema, which you can acquire using one of the getter methods.

DaoSession 管理所有的由schema生成的Dao对象,并提供getter()方法获取该Dao对象。

DAOs (Data Access objects):

DAOs persists and queries for entities. For each entity, greenDAO generates a DAO. It has more persistence methods than the DaoSession.

Daos 对这些实体类提供持久化、可获取的方法。对于每一个Entitiy,greenDao生成一个对应的DAO,该Dao对象比DaoSession提供更多的方法。

Entities:

Persistable objects. Usually, entities are generated。

持久化对象。通常是由greenDao生成的。

5.初始化,开始使用:

官网介绍:

DaoMaster.DevOpenHelper helper =
new DaoMaster.DevOpenHelper(UIUtil.getContext(), DB_NAME, null);
SQLiteDatabase db = helper.getWritableDatabase();

//获取DaoMaster对象
DaoMaster daoMaster = new DaoMaster(db);

//获取DaoSession对象,其内持有各种EntitiyDao
DaoSession daoSession = daoMaster.newSession();

//实体类Dao,用来对数据库进行操作
EntityDao entityDao = daoSession.getEntityDao();


在项目实践中,我们一般都有一个DBManger来进行存储。通过这一层再封装一层数据库,以方便之后替换数据库。

代码如下,使用单例模式获取DaoSession,再通过daoSession获取其他的XxxDao。

public class DBManager {
private static final String DB_NAME = "daily-db";

private static DBManager dbManager;//单例对象

//daoSession成员变量,通过它来获取其他Daos
private DaoSession daoSession;

private DBManager() {
//初始化greenDao
DaoMaster.DevOpenHelper helper =
new DaoMaster.DevOpenHelper(UIUtil.getContext(), DB_NAME, null);
SQLiteDatabase db = helper.getWritableDatabase();
DaoMaster daoMaster = new DaoMaster(db);
daoSession = daoMaster.newSession();//获取daoSession
}

//单例
public static DBManager instance() {
if (dbManager == null) {
synchronized (DBManager.class) {
if (dbManager == null) {
dbManager = new DBManager();
}
}
}

return dbManager;
}

//获取dao
private SavedStoryDao getSavedStoryDao() {
return daoSession.getSavedStoryDao();
}

//存储list
public void saveStoryList(List<SavedStory> list) {
getSavedStoryDao().insertOrReplaceInTx(list);
}

//读取list
public List<SavedStory> getStoryList(String date) {
List<SavedStory> savedStories =
getSavedStoryDao().queryBuilder().where(SavedStoryDao.Properties.Date.eq(date)).list();
return savedStories;
}
}


这种方式可能还不是最好的方式。网上还有很多是将初始化过程放在Application中,然后通过application对象获取。

结语:

greenDao之前也使用过,这次好好整理了一次。学到了不少,相信随着代码写的越来越熟悉,也会将它用的越来越好。

相关使用在 github 项目上。代码还未完成,可以看下greenDao。

参考:

green-dao官网

greenDao documentation

tangqi 的 MyGreenDAO <—注释很清晰,上手很快

数据库ORM框架GreenDao学习心得及使用总结
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: