Spring中Mongodb的java實體類映射

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類


@Document  
public class Account {  
  
  @Id  
  private ObjectId id;  
  private Float total;  
  
} 
spring data 4 mongoDB自動創建複合索引
spring data 4 mongodb 在domain上添加annation,自動創建複合索引時需要使用CompoundIndexes。

例如:
 
@CompoundIndex(name = "shop_index", def = "{platform : 1, shopId : 1}") 
程序也不會有編譯錯誤或者執行錯誤,但是spring data不會建立任何索引, 
下面這樣寫纔會啓動時自動建立複合索引。 
 
@CompoundIndexes({ 
     @CompoundIndex(name = "shop_index", def = "{platform : 1, shopId : 1}") 
}) 
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章