2013-07-23 71 views
6

所以我注意到Spring Data的MongoTemplate有很多不同類型的「保存對象」操作,比如save,upsert,insert和updateFirst。另一方面,Spring Data的MongoRepository接口有一個持久化方法:「保存」。很明顯,如果我想創建/更新/插入功能,我可以很容易地實現它們。在你打電話給「保存」之前,先試一試,然後檢查實體是否存在。但MongoTemplate具有如此多樣的選項(我甚至不知道保存和上傳之間的區別是什麼),這似乎很奇怪,但Spring Data的回購非常有限。爲什麼Spring Data的MongoRepository如此有限?

如果您要使用create/update語義,或者get + null檢查+ repository.save與a之間的區別,您是否認爲使用Spring Data MongoRepository時沒有自定義其方法是浪費/懶惰mongoTemplate.insert太無關緊要了嗎?

回答

0

彈簧數據如下repository patternRepository是DAO層的抽象,用於通用存儲和檢索域實體。在存儲庫層的底部有DAO層部分,其中使用了MongoTemplate

所以Repository有邏輯保存方法。從域的角度來看,你不應該關心域實體是如何堅持的。您只需撥打MongoTemplate即可撥打MongoRepository實施方式。

3

您可以使用XXXRepositoryCustom自定義您自己的存儲庫併爲其編寫實現。

下面是一個例子:

public interface AccountRepository extends MongoRepository<Account, String>, AccountRepositoryCustom{ 

    @Query("{ 'email' : ?0 }") 
    Account findByEmail(String email); 

} 

通知中的上述接口擴展自己AccountRepositoryCustom接口。

然後定義自己的AccountRepositoryCustom:

public interface AccountRepositoryCustom { 

    public boolean updateAccountToken(String id, String token); 

} 

接下來,爲它編寫一個實現:

public class AccountRepositoryCustomImpl implements AccountRepositoryCustom { 

    @Autowired 
    private MongoTemplate mongoTemplate; 

    @Override 
    public boolean updateAccountToken(String id, String token) {  
      // your code 
    } 
} 
+2

是的,我以前做過。但是,當Spring Data存儲庫的要點是爲了減少樣板代碼IMO時,爲了獲得更新和創建方法而編寫了很多樣板代碼。 – CorayThan

相關問題