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学习心得及使用总结
相关文章推荐
- android项目总结
- android 应用退到后台,类似最小化moveTaskToBack(),判断是否是task的根isTaskRoot()
- Android开发小技巧之对android颜色渐变(Gradient )的改进
- Android Studio 推荐安装插件
- Rendering Problems
- Android Fragment详解(一):概述
- android学习之xml解析
- Android自定义控件无法通过代码修改大小、高宽,setMinimumHeight无效的问题
- AndroidStudio常见问题汇总(一)Rendering Problems
- Android实现双屏异显
- 使用Android Studio进行NDK开发
- Android LoaderManager详解
- android存储讲解
- Android自定义ListView实现第一可见项和最后可见项的淡入淡出效果
- Android:应用前后台切换判断
- Android Fragment详解(一):概述
- Android Studio 小技巧合集
- android的工程和代码的命名规范(第一篇文章,勿喷)
- 基于DLNA实现iOS、Android投屏:基本概念
- Android .mk文件中需要注意的一些宏