使用 POJO 的简单 CRUD

Ektorp 的一大优点是,它提供了类似 ORM 的功能,直接开箱即用。这个例子将引导你创建一个简单的 POJO 并对其进行标准的 CRUD 操作

创建一个简单的 POJO

首先,我们定义 POJO 如下

import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;

@JsonInclude(JsonInclude.Include.NON_NULL)
public class Person {
    @JsonProperty("_id") private String id;
    @JsonProperty("_rev") private String revision;
    private String name;

    public String getId() {
        return id;
    }

    public String getRevision() {
        return revision;
    }

    public String getName() {
        return name;
    }

    public void setId(String id) {
        this.id = id;
    }

    public void setRevision(String revision) {
        this.revision = revision;
    }

    public void setName(String name) {
        this.name = name;
    }
}

那么,这里发生了什么?注释 @JsonInclude(JsonInclude.Include.NON_NULL) 告诉 jackson 不要将空字段序列化为 JSON。因此,例如,如果 id 属性为 null,则根本不会在生成的 JSON 中具有 id 属性。

另外,@JsonProperty("_id")@JsonProperty("_rev") 注释是指令,通知序列化器/反序列化器将这些值映射到的 JSON 属性。CouchDB 中的文档必须同时具有_id 和_rev 字段,因此你打算在 CouchDB 中保留的所有 POJO 必须包含如上所述的 id 和 revision 属性。只要你不更改注释,你就可以在 POJO 中以不同方式命名你的属性。例如,

@JsonProperty("_id") private String identity;
@JsonProperty("_rev") private String version;

将新实例持久保存到 CouchDB

现在,在数据库中创建一个全新的文档,如下所示,假设你有一个有效的 CouchDbInstance 实例,并且你希望将该文档保存在名为 person 的数据库中 **

CouchDbConnector connector = dbInstance.createConnector("person", true);

Person person = new Person();
person.setName("John Doe");
connector.create(person);

现在,在这种情况下,CouchDB 将自动为你创建新的 ID 和修订版。如果你不想要这个,你可以使用

connector.create("MyID", person);

加载,更新和删除文档

假设你已准备好 CouchDBConnector 实例,我们可以按如下方式加载 POJO 的实例

Person person = connector.get(Person.class, "id");

然后我们可以操作它,并按如下方式更新它

person.setName("Mr Bean");
connector.update(person);

请注意,如果沙发中文档的修订版与你要发送的文档的修订版不匹配,则更新将失败,你需要从数据库加载最新版本并相应地合并你的实例。

最后,如果我们希望删除实例,它就像它一样简单

connector.delete(person);