Working with existing data

Cupboard 不仅可以存取你自己的数据,还可以与已有的数据进行集成。 许多 Android 框架会返回一个 Cursor 对象,你可以使用 cupboard().withCursor() 来进行衔接。也可以使用 cupboard().withDatabase() 来对已有的数据库进行操作。

通常来说,当使用 Cursor 来处理已有的数据时,更倾向于使用单独的 Cupboard 实例来进行操作,而不是使用 CupboardFactory.cupboard() 得到的全局 Cupboard 实例。

注解/Annotations

为了更简单的与已有的数据结合,Cupboard 提供了两个辅助注解。

@Column 用来为实体字段提供一个列名

@Ignore 用来忽略一个实体字段,而无需就将这个字段声明为 transient。

在与第三方库共用 model 的时候(比如使用 Gson 或者 Jackson 来序列化数据的时候),这样会非常方便。

另外,@Index 和 @CompositeIndex 可以用来定义 schema。

启用注解/Enabling annotations

出于性能的考虑,特别是在低版本的 Android 系统上,运行时注解反射会相当慢,所以,注解默认是关闭的。

启用注解,你可以使用 CupboardBuilder 来构建一个 Cupboard 实例:

    Cupboard cupboard = new CupboardBuilder().useAnnotations().build();

为了启用全局的注解,使用 CupboardFactory 来构建一个全局的 Cupboard 实例即可。

    CupboardFactory.setCupboard(new CupboardBuilder().useAnnotations().build());

只在创建 schema 的时候启用注解/Enabling annotations for schema creation only

使用 @Column 的例子参见: the sample

如果只是为了使用 @Index 或者 @CompositeIndex 而启用全局的 cupboard() 实例注解,就有点得不偿失了。 这个情况下,可以使用 CupboardBuilder 来创建一个专门用于创建 table 的 Cupboard 实例:

    SQLiteDatabase db = ...
    Cupboard annotatedCupboard = new CupboardBuilder(cupboard()).useAnnotations().build();
    annotatedCupboard.withDatabase(db).createTables();