使用 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);