Android orm框架Sugar1.4源码(映射篇)

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

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

首先分析SchemaGenerator.java

createTable(Class<?> table, SQLiteDatabase sqLiteDatabase)

中的getTableFields方法

List<Field> fields = ReflectionUtil.getTableFields(table);

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

《Android orm框架Sugar1.4源码(映射篇)》 获取Field列表.png

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

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

《Android orm框架Sugar1.4源码(映射篇)》 SugarConfig代码.png

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

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

《Android orm框架Sugar1.4源码(映射篇)》 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了

    原文作者:Android技术研究
    原文地址: https://www.jianshu.com/p/d5d8e27dc1eb
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞