我们可以在同一个应用程序中同时使用 MongoRepository 和 MongoTemplate

Can we use both MongoRepository and MongoTemplate in same application

我需要在 MongoDB 和一些简单的 queries.Can 上编写一些复杂查询 我使用 MongoRepository 进行简单查询,使用 MongoTemplate 以及 Query 或 Criteria 进行复杂查询实现相同的应用程序。

在同一应用程序中同时使用 MongoTemplate 和 MongoRepositories 是好的设计吗?这种方法有什么缺点吗?

此外,在单个查询中编写具有大量涉及 and,or,IN 和 Not In 的谓词的复杂查询的最佳方法是什么。

尽管 MongoRepository 比 MongoTemplate 使用起来简单得多,但模板可以让您对正在实施的查询进行更细粒度的控制。

话虽如此,您仍然可以像这样使用 MongoRepository 实现复杂查询:

@Query("{'id': ?#{ [0] ? {$exists :true} : [1] }}")
List<Person> findByQueryWithExpressionAndNestedObject(boolean param0, String param1);

可以在 here

上找到更多信息

但作为一种实践,在您的代码中同时包含两者实际上是好的,即

  1. 当你想使用已经实现的存储库时使用它。
  2. 当您想实现具有复杂逻辑的 customMethod 时,使用 mongo-template 手动实现一些自定义方法。

实施

第 1 步:

interface CustomEmployeeRepository{
    List<Employee> CustomEmployeeMethod(String field)
}

第 2 步:

@Repository
public class CustomEmployeeRepositoryImpl implements CustomEmployeeRepository{

    @Autowired
    private MongoTemplate mongotemplate;

    @Override
    List<Employee> CustomEmployeeMethod(String field){
    
    }
}

第 3 步: 现在创建一个扩展 MongoRepositoryCustomEmployeeRepository 的新存储库,以使用存储库的自定义实现和预定义方法。

interface EmployeeRepository extends MongoRepository<Employee, long>, CustomEmployeeRepository{
}

这样您就可以两全其美。有关实施的更多信息,请参阅文档。 希望这有帮助。