MongoTemplate 教程系列(一)

弱冠季首發表於2018-02-08

第一章: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()方法
複製程式碼

實際效果:

MongoTemplate 教程系列(一)

相關文章