为什么Spring Data的MongoRepository如此有限?

9
我注意到Spring Data的MongoTemplate有许多不同类型的“保存对象”操作,例如save、upsert、insert和updateFirst。
另一方面,Spring Data的MongoRepository接口只有一个持久化方法:“save”。显然,如果我想要创建/更新/插入功能,我可以很容易地实现它们。只需在调用“save”之前进行获取并检查实体是否存在即可。但是,MongoTemplate有这么多的选项似乎有些奇怪(我甚至无法弄清楚save和upsert之间的区别),但是Spring Data的repos却如此有限。
如果您将使用创建/更新语义,那么在不自定义其方法的情况下使用Spring Data MongoRepositories是否浪费/懒惰,或者get + null check + repository.save与mongoTemplate.insert之间的差异太微不足道而不值得关注?
3个回答

6
你可以使用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 
    }
}

5
是的,我以前做过那个。但是为了获得更新和创建方法而写大量样板代码,在我看来这太繁琐了。Spring Data仓库的主要目的是减少样板代码。 - CorayThan

0

0

Spring Data 遵循 repository patternRepository 是 DAO 层的抽象,用于通用存储和检索领域实体。在 repository 层的底部,有 DAO 层的部分,其中使用了 MongoTemplate

因此,Repository 具有逻辑保存方法。从领域角度来看,您不应该关心领域实体是如何持久化的。您只需调用保存方法,MongoTemplate 的使用取决于 MongoRepository 的实现。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接