天天看點

spring-data-mongodb 使用筆記

1、查詢部分屬性

EntityRepository基礎倉庫類

package com.fun.website.common;

import org.springframework.data.mongodb.repository.MongoRepository;

public interface EntityRepository<T> extends MongoRepository<T, String> {

}

AccountRepository賬戶倉庫類
package com.fun.website.module.account.manager;

import org.springframework.data.mongodb.repository.Query;

import com.fun.website.common.EntityRepository;

public interface AccountRepository extends EntityRepository<Account> {

	@Query(value="{ 'username' : ?0 }", fields="{ 'username' : 1, '_id' : 0}")
	Account findByUsername(String username);

        @Query(value="{ 'type': {'$in' : ?0} }",fields="{ 'type' : 1}")
        public List<Account> findTest(String[] name);
        
        @Query(value="{?0:?1}")  
        public List<Account> findTest2(Object field,Object Value);
    
        //正則測試
        @Query(value="{ 'type' :{'$regex' :?0, '$options': 'i'} }")    
        public List<Account> findTest3(String name); 
    
        //日期查詢
        @Query(value="{ 'executeDate' :{'$gt' : ?0 } }")    
        public List<Account> findTest4(Date date);  
    
        //内部查詢 findBy{字段}{條件}
        public List<Account> findByTypeLike(String name); 
        public List<Account> findByTypeLike(String name, Sort sort); 
        public List<Account> findByTypeLike(String name, Pageable pageable); 


}
           

其中“@Query(value="{ 'username' : ?0 }", fields="{ 'username' : 1, '_id' : 0}")”,value是查詢條件,fields指定查詢部分屬性,預設查詢全部屬性。

2、bean的配置屬性

它有以下幾種注釋:

@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;
  }