美文网首页Android技术研究
Android orm框架Sugar1.4源码(映射篇)

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

作者: Android技术研究 | 来源:发表于2016-03-21 11:24 被阅读183次

    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了

    相关文章

      网友评论

        本文标题:Android orm框架Sugar1.4源码(映射篇)

        本文链接:https://www.haomeiwen.com/subject/jhdclttx.html