开发过程中,总会进行数据存储操作。当文件不能满足需求时,就会使用SQLite进行存储。于是就有很多ORM框架出现。在这里自己选择使用greenDao作为项目的数据库框架。greenDao在所有的Android数据库ORM开源框架中效率最高,官网这么描述:PRobably the fastest ORM for Android.
但是greenDao学习曲线并不如其他的框架那么简单,也算是有长有短。这篇文章就是自己使用greenDao过程中的笔记和总结。主要是大量看官方文档,它的官方文档比几个月前写的好太多,而且很清晰,很容易就看懂了。
使用方法:
在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'] } }}编写完数据存储对象后,run该main()方法,就会在指定路径下生成响应的类。
关于更多定义Entity介绍,请看官网,讲的真的很详细。modelling-entities。
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。
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 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提供更多的方法。
Persistable objects. Usually, entities are generated。 持久化对象。通常是由greenDao生成的。
官网介绍:
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学习心得及使用总结
新闻热点
疑难解答