Android技术研究原创如需转载请注明出处

ORM百度百科
上一篇分析了数据库创建相关的核心代码,这一篇主要是分析Sugar中怎么通过domain映射相关table

首先分析SchemaGenerator.java

createTable(Class<?> table, SQLiteDatabase sqLiteDatabase)

中的getTableFields方法

List fields = ReflectionUtil.getTableFields(table);

此方法根据domain获取相关的Field列表,下面具体看获取Field列表的代码


获取Field列表.png

其中有两种获取Field列表的方式
1、SugarConfig.getFields()如果获取了列表回直接返回
2、SugarConfig.getFields()返回null时调用getAllFields方法

我们先分析第一个流程SugarConfig.getFields(table)


SugarConfig代码.png

可以看见SugarConfig中有个静态的缓存集合,这个集合用来保存已经set进来的table的Field,第一次进来根据key去获取是不可能有值的,会返回null,走上面的第二种获取方式

现在来看第二种getAllFields(typeFields, table)方法的获取流程

getAllFields.png

以上代码分别获取了当前domain及domain父类中的Field

if (!field.isAnnotationPresent(Ignore.class) && !Modifier.isStatic(field.getModifiers()) && !Modifier.isTransient(field.getModifiers()))

接着判断当前Field的注释是否可以被忽略及Field的修饰类型,如果不是上面三种类型则添加进列表,并且保存到SugarConfig中的缓存中,然后返回给getTableFields方法,到目前为止已经拿到了domain中的所有相关Field,接着就可以根据相关Field来创建table了

更多相关文章

  1. pandaboard ES学习之旅——1 制作烧写SD卡
  2. Android(安卓)实现在ImageView上绘图
  3. Android(安卓)Wear开发 - 数据通讯 - 第一节 : 连接数据层
  4. Android中home键和back键区别实例分析
  5. 安卓开发中Android消息机制详解
  6. Android(安卓)UI开发第三十篇――使用Fragment构建灵活的桌面
  7. Unity与Android对比学习之生命周期方法
  8. Unity导出Android在高通骁龙800以上CPU概率性崩溃解决方法研究
  9. Android中AsyncTask的入门使用学习指南

随机推荐

  1. 使用SVN管理Android工程
  2. Android Studio下载安装及配置图文教程
  3. android-----错误解决
  4. Android 定时执行任务
  5. 加android库
  6. 2018-06-02 mac上完整卸载删除:android s
  7. Hello Android - Android SDCard操作(文
  8. “ant debug install” 出错: sdk.dir is
  9. 分析图库
  10. android 运用AsyncTask 获取图片并显示