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列表的代码


获取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了

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容