ObjectBox[四] 数据库持久化之实体注解

来源:互联网 发布:乌鲁木齐乐知少儿英语 编辑:程序博客网 时间:2024/05/21 19:30

ObjectBox[一] 特性

ObjectBox[二] 教程:如何开始使用ObjectBox

ObjectBox[三] 教程:安装和基础

ObjectBox[四] 数据库持久化之实体注解

ObjectBox[五] 基本操作:查询

ObjectBox[六] 数据监听和RX(Data Observers and Reactive Extensions)

ObjectBox[七] 支持LiveData(Android体系结构组件)

ObjectBox[八] 关系

ObjectBox[九] 数据模型变更

ObjectBox[十] 自定义类型

ObjectBox[十一] 事务

ObjectBox[十二] Meta Model, IDs, and UIDs

ObjectBox[十三] 数据调试


ObjectBox是一个直接保存对象的数据库。为了清晰,我们有时会调用那些可持久化的对象实体。要让ObjectBox知道哪些类是实体,请向其添加注解。然后ObjectBox就可以自动生成持久化需要的代码。
下面是一个例子:

@Entitypublic class User {    @Id    private long id;    private String name;    @Transient    private int tempUsageCount; // not persisted   // getters and setters for id and user ...}

@Entity注解表明User类是一个可以持久化的实体。将触发ObjectBox为此类生成定制的持久化代码。
注意:dumbs class (POJOs :Plain Old Java Objects, 简单洁净Java对象 )(java Bean类)作为实体是一个比较好的做法

注意: 如果您使用Kotlin来定义您的实体类,请查看ObjectBox和Kotlin文档。

对象ID:@Id

在ObjectBox中,每个对象都有一个long类型的ID 来有效地获取或操作对象。在您的实体的长整型属性上使用 @Id注解 :

@Entitypublic class User {    @Id    private long id;    ...}

对象ID有几点需要注意:

  • 值0(零)和-1(0xFFFFFFFFFFFFFFFF)不能用作ID。

  • ID为0的对象(如果ID是Long类型,则为 null)被认为是新的。插入这样的对象,数据库会认为是新数据并分配一个新的id。

  • 默认情况下,对象ID由ObjectBox分配。对于每个新的对象,ObjectBox将分配一个未使用的ID,该ID高于当前在Box中使用的最高ID值。例如,如果在一个Box中有两个对象ID 1和ID 100,则存入的下一个对象将被分配ID 101。

  • 如果您尝试使用ID大于当前最高ID的对象,则ObjectBox将引发错误。

  • 如果要自己分配ID,您可以将ID注解更改为@Id(assignable = true) 。这将允许ID可以有任何值,包括0和-1。

如果您的应用程序中id是其他类型(例如由服务器提供的字符串UID),则可以将它们设置为标准属性(例如String uid),并使用query查询uid来得到实体。

@Entitypublic class User {    @Id    private long id;    @Index    private String serverUid;    ...}

@Index 表示数据库会建立该属性的索引,当频繁查询该属性时会提高性能。

ObjectBox操作实体数据

ObjectBox需要访问你实体属性的数据(例如在生成的Cursor类中)。你有两个选择:

  1. 设置属性作用域为 “package private” (不是 “private”) 。在Kotlin中, 你可以使用@JvmField
  2. 提供标准的 getters。

基本注解

@Entitypublic class User {    @NameInDb("USERNAME")    private String name;    @Transient    private int tempUsageCount;    ...}

@NameInDb允许您在数据库级别上为属性自定义一个名称。这允许您重命名Java字段而不影响数据库级别上的属性名称(方便修改类)。 注1:对于重命名,UID是首选。 注2:您目前只能使用内联常量来指定列名。

@Transient表示该属性不会被持久化。

属性索引

使用@Index 表示数据库会建立该属性的索引,当频繁查询该属性时会提高性能。

@Entitypublic class User {    @Id    private Long id;    @Index    private String name;}

关系

可以在对象之间创建一对多和多对多关系,详情请参阅 关系文档。

代码生成

一旦写好你的实体代码,你可以通过编译你的项目来触发代码生成过程。例如 在Android Studio中使用Build> Make project。

如果在更改实体类后遇到错误,请尝试Rebuild项目,以确保清除原有生成的文件。

原文:http://objectbox.io/documentation/entity-annotations/

原创粉丝点击