上一篇文章主要讲述了GreenDao的生成过程,以及如何初始化,那么本篇来讲一下GreenDao的核心类的代码解析以及如何调用GreenDao实现数据操作。
从上篇初始化讲解的时候可以看到,GreenDao初始化的时候,实例化了几个核心类,分别是DevOpenHelper, DaoSession, DaoMaster.
1. DevOpenHelper
DevOpenHelper是DaoMaster的内部类。先看一下它的继承层级,就明白它是做什么的了
.SqliteOpenHelper
.DatabaseOpenHelper
.OpenHelper
.DevOpenHelper
从以上继承关系可以看出,DevOpenHelper的最终继承是SqliteOpenHelper.是不是很眼熟呢?没错,它就是我 们常用的手写数据库操作的类,我们通过它建立与更新数据库;由此可见,GreenDao也是在SqliteOpenHelper 基础上封装的。在DevOpenHelper中,定义了onCreate 与onUpgrade的实现,如图:
2. DaoMaster
DaoMaster是数据库创建与更新过程的核心类,相当于辅助SqliteOpenHelper完成数据创建过程的类,我们 来看一下DaoMaster的主要代码结构,除了DevOpenHelper以外,DaoMaster包含以下方法:
. createAllTables与 dropAllTables
. newSession 与 newDevSession
前者用于在onCreate中创建所有的表;后者则用于在onUpgrade中删除所有的表。
newSession与newDevSession分别在初始化中创建DaoSession实例。
3. AbstractDaoSession
.DaoSession
DaoSession是一个业务类,继承自AbstractDaoSession; DaoSession根据每一个表创建一个Table ->Bean的 关联,将数据表与实体类真正的绑定到一起,便于GreenDao用对象直接操作数据库。DaoSession的作用除了 做一些基础的配置以外,主要实现所有Dao的实例化,并与Table绑定到一起。核心代码为:
UserDao userDao = new UserDao(userDaoConfig, this); // 实例化UserDao
registerDao(User.class, userDao); // 注册Dao,传入User的Bean Class与UserDao
上一篇中的GreenDao初始化时说过,调用GreenDao操作数据库,需要用DaoSession对象来获取XXDao;那么 在DaoSession的父类AbstractDaoSession中,主要执行一些对象关系绑定,以及数据库基本操作,比如 insert/delete/update等。这样在AbstractDaoSession中便于统一获取Dao来执行数据库的基本操作。 AbstractGreenDao的核心变量与方法如下:
. Map<Class<?>, AbstactDao<?, ?>> entityToDao
. registerDao(Class<T> entityClass, Abstract<T, ?> dao)
. getDao(Class<? extends Object> entityClass)
. insert/delete/update/refresh
从以上可以看出AbstractDaoSession的主要职能: 1) 建立Dao与对应Entity的对应关系 2)统一获取Dao执 行数据库基本操作
4. Dao
这里的Dao是通过genetator自动生成的对应于每一个实体类或者表格的Dao,一个表对应一个Bean类对应一 个Dao。在这些生成的Dao中,有一个共同的部分需要解释一下,那就是内部类Propertys,它以Property的形式 保存该表的所有字段或者类的所有属性,我们在进行数据库操作时,特别是在查询时,需要用Property对象来 设置查询条件。如下:
共同学习,写下你的评论
评论加载中...
作者其他优质文章