spring-data-mongodb中的實體映射是通過
MongoMappingConverter這個類實現的。它可以通過注釋把
java類轉換為mongodb的文檔。
它有以下幾種注釋:
@Id - 文檔的唯一標識,在mongodb中為ObjectId,它是唯一的,通過時間戳記+機器標識+進程ID+自增計數器(確保同一秒內產生的Id不會衝突)構成。
@Document - 把一個java類聲明為mongodb的文檔,可以通
過collection參數指定這個類對應的文檔。
@DBRef - 聲明類似於關聯式資料庫的關聯關係。ps:暫不支援級聯的儲存功能,當你在本執行個體中修改了DERef對象裡面的值時,單獨儲存本執行個體並不能儲存DERef引用的對象,它要另外儲存,如下面例子的Person和Account。
@Indexed - 聲明該欄位需要索引,建索引可以大大的提高查詢效率。
@CompoundIndex - 複合索引的聲明,建複合索引可以有效地提高多欄位的查詢效率。
@GeoSpatialIndexed - 聲明該欄位為地理資訊的索引。
@Transient - 映射忽略的欄位,該欄位不會儲存到
mongodb。
@PersistenceConstructor - 聲明建構函式,作用是把從資料庫取出的資料執行個體化為對象。該建構函式傳入的值為從DBObject中取出的資料。
以下引用一個官方文檔的例子:
Person類
@Document(collection="person")@CompoundIndexes({ @CompoundIndex(name = "age_idx", def = "{'lastName': 1, 'age': -1}")})public class Person<T extends Address> { @Id private String id; @Indexed(unique = true) private Integer ssn; private String firstName; @Indexed private String lastName; private Integer age; @Transient private Integer accountTotal; @DBRef private List<Account> accounts; private T address; public Person(Integer ssn) { this.ssn = ssn; } @PersistenceConstructor public Person(Integer ssn, String firstName, String lastName, Integer age, T address) { this.ssn = ssn; this.firstName = firstName; this.lastName = lastName; this.age = age; this.address = address; }
Account類
@Documentpublic class Account { @Id private ObjectId id; private Float total;}