spring-data-mongodb中的實(shí)體映射是通過MongoMappingConverter這個類實(shí)現(xiàn)的影斑。它可以通過注釋把java類轉(zhuǎn)換為mongodb的文檔来候。
它有以下幾種注釋:
@Id - 文檔的唯一標(biāo)識铐料,在mongodb中為ObjectId剧包,它是唯一的来破,通過時間戳+機(jī)器標(biāo)識+進(jìn)程ID+自增計數(shù)器(確保同一秒內(nèi)產(chǎn)生的Id不會沖突)構(gòu)成。
@Document - 把一個java類聲明為mongodb的文檔,可以通過collection參數(shù)指定這個類對應(yīng)的文檔。
@DBRef - 聲明類似于關(guān)系數(shù)據(jù)庫的關(guān)聯(lián)關(guān)系扣汪。ps:暫不支持級聯(lián)的保存功能,當(dāng)你在本實(shí)例中修改了DERef對象里面的值時锨匆,單獨(dú)保存本實(shí)例并不能保存DERef引用的對象私痹,它要另外保存,如下面例子的Person和Account。
@Indexed - 聲明該字段需要索引紊遵,建索引可以大大的提高查詢效率账千。
@CompoundIndex - 復(fù)合索引的聲明,建復(fù)合索引可以有效地提高多字段的查詢效率暗膜。
@GeoSpatialIndexed - 聲明該字段為地理信息的索引匀奏。
@Transient - 映射忽略的字段,該字段不會保存到mongodb学搜。
@PersistenceConstructor - 聲明構(gòu)造函數(shù)娃善,作用是把從數(shù)據(jù)庫取出的數(shù)據(jù)實(shí)例化為對象。該構(gòu)造函數(shù)傳入的值為從DBObject中取出的數(shù)據(jù)瑞佩。
@Field("stock_name") - 映射數(shù)據(jù)里面的字段聚磺,否則存放到數(shù)據(jù)庫里面的字段名字跟實(shí)體類變量名一樣
private String stockName = “”;
以下引用一個官方文檔的例子:
Person類
@Document(collection="person")
@CompoundIndexes({undefined
@CompoundIndex(name="age_idx",def="{'lastName':1,'age':-1}")
})
publicclassPerson<TextendsAddress>{undefined
@Id
privateStringid;
@Indexed(unique=true)
privateIntegerssn;
privateStringfirstName;
@Indexed
privateStringlastName;
privateIntegerage;
@Transient
privateIntegeraccountTotal;
@DBRef
privateList<Account>accounts;
privateTaddress;
publicPerson(Integerssn){undefined
this.ssn=ssn;
}
@PersistenceConstructor
publicPerson(Integerssn,StringfirstName,StringlastName,Integerage,Taddress){undefined
this.ssn=ssn;
this.firstName=firstName;
this.lastName=lastName;
this.age=age;
this.address=address;
}
Account類
@Document
publicclassAccount{undefined
@Id
privateObjectIdid;
privateFloattotal;
}
spring data 4 mongoDB自動創(chuàng)建復(fù)合索引
spring data 4 mongodb 在domain上添加annation,自動創(chuàng)建復(fù)合索引時需要使用CompoundIndexes炬丸。
例如: @CompoundIndex(name = "shop_index", def = "{platform : 1, shopId : 1}") 程序也不會有編譯錯誤或者執(zhí)行錯誤漂羊,但是spring data不會建立任何索引, 下面這樣寫才會啟動時自動建立復(fù)合索引刨晴。 @CompoundIndexes({ @CompoundIndex(name = "shop_index", def = "{platform : 1, shopId : 1}") })