首页 > 系统 > Android > 正文

Android ORM框架 greenDao使用

2019-11-07 22:52:15
字体:
来源:转载
供稿:网友

前言:

开发过程中,总会进行数据存储操作。当文件不能满足需求时,就会使用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 项目上。

参考: green-dao官网 greenDao documentation tangqi 的 MyGreenDAO <—注释很清晰,上手很快 数据库ORM框架GreenDao学习心得及使用总结


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表