手记

Android框架系列之GreenDao (二)

    上一篇文章主要讲述了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对象来         设置查询条件。如下:

  

 

原文链接:http://www.apkbus.com/blog-192385-62614.html

0人推荐
随时随地看视频
慕课网APP