第一章:Document定義
-
註解說明:
@Id - 文件的唯一標識,在mongodb中為ObjectId,它是唯一的,通過時間戳+機器標識+程式ID+自增計數器(確保同一秒內產生的Id不會衝突)構成。
原始碼:
@Retention(RetentionPolicy.RUNTIME) @Target({ElementType.FIELD, ElementType.METHOD, ElementType.ANNOTATION_TYPE}) public @interface Id { } 複製程式碼
@Document - 把一個java類宣告為mongodb的文件,可以通過collection引數指定這個類對應的文件。
原始碼:
@Persistent @Inherited @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.TYPE}) public @interface Document { String collection() default ""; String language() default ""; } 複製程式碼
@DBRef - 宣告類似於關聯式資料庫的關聯關係。ps:暫不支援級聯的儲存功能,當你在本例項中修改了DERef物件裡面的值時,單獨儲存本例項並不能儲存DERef引用的物件,它要另外儲存,如下面例子的Person和Account。
原始碼:
@Documented @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.FIELD}) @Reference public @interface DBRef { String db() default ""; boolean lazy() default false; } 複製程式碼
@Indexed - 宣告該欄位需要索引,建索引可以大大的提高查詢效率。
原始碼:
@Target({ElementType.ANNOTATION_TYPE, ElementType.FIELD}) @Retention(RetentionPolicy.RUNTIME) public @interface Indexed { boolean unique() default false; IndexDirection direction() default IndexDirection.ASCENDING; boolean sparse() default false; boolean dropDups() default false; String name() default ""; boolean useGeneratedName() default false; /** @deprecated */ @Deprecated String collection() default ""; boolean background() default false; int expireAfterSeconds() default -1; } 複製程式碼
@CompoundIndex - 複合索引的宣告,建複合索引可以有效地提高多欄位的查詢效率。
原始碼:
@Target({ElementType.TYPE}) @Documented @Retention(RetentionPolicy.RUNTIME) public @interface CompoundIndex { String def() default ""; /** @deprecated */ @Deprecated IndexDirection direction() default IndexDirection.ASCENDING; boolean unique() default false; boolean sparse() default false; boolean dropDups() default false; String name() default ""; boolean useGeneratedName() default false; /** @deprecated */ @Deprecated String collection() default ""; boolean background() default false; } 複製程式碼
@GeoSpatialIndexed - 宣告該欄位為地理資訊的索引。
原始碼:
@Target({ElementType.FIELD, ElementType.ANNOTATION_TYPE}) @Retention(RetentionPolicy.RUNTIME) public @interface GeoSpatialIndexed { String name() default ""; boolean useGeneratedName() default false; /** @deprecated */ @Deprecated String collection() default ""; int min() default -180; int max() default 180; int bits() default 26; GeoSpatialIndexType type() default GeoSpatialIndexType.GEO_2D; double bucketSize() default 1.0D; String additionalField() default ""; } 複製程式碼
@Transient - 對映忽略的欄位,該欄位不會儲存到mongodb。
原始碼:
@Retention(RetentionPolicy.RUNTIME) @Target({ElementType.FIELD, ElementType.METHOD, ElementType.ANNOTATION_TYPE}) public @interface Transient { } 複製程式碼
@PersistenceConstructor - 宣告建構函式,作用是把從資料庫取出的資料例項化為物件。該建構函式傳入的值為從DBObject中取出的資料
原始碼:
@Retention(RetentionPolicy.RUNTIME) @Target({ElementType.CONSTRUCTOR}) public @interface PersistenceConstructor { } 複製程式碼
-
Example:
public class Item implements Serializable{
/** 專案名稱 **/
private String item_name;
/** 分數 **/
private double score;
/** 單位 **/
private String unit;
//省略 get() set()方法
複製程式碼
@Document(collection = "pt")
public class PT implements Serializable {
@Id
private String id;
/**學生id **/
private String student_Id;
/** 學生姓名 **/
private String student_name;
/** 學校id **/
private String school_id;
/** 學校名稱 **/
private String school_name;
/** 年級id **/
private String grade_id;
/** 年級名稱 **/
private String grade_name;
/** 班級id **/
private String class_id;
/** 班級名稱 **/
private String class_name;
/** 批次 **/
private String batch;
/** 測試時間 **/
private Date test_time;
/** 專案 **/
private List<Item> items;
//省略 get() set()方法
複製程式碼
實際效果: