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

时间:2018-05-05 04:44:10

标签: mongodb-query spring-data spring-data-mongodb

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

在同一个应用程序中同时使用MongoTemplate和MongoRepositories是不错的设计。这种方法有什么缺点。

使用大量谓词编写复杂查询的最佳方法是什么,它涉及单个查询中的和,或者IN和Not In。

1 个答案:

答案 0 :(得分:1)

尽管MongoRepository比MongoTemplate更易于使用,但是模板可以让您对正在实现的查询进行更细粒度的控制。

说过你仍然可以使用MongoRepository来实现复杂的查询:

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

可以找到有关here

的更多信息

但作为一种做法,在你的代码中同时使用它们实际上是好的,那就是

  1. 如果您要使用已经实施的存储库,请使用存储库。
  2. 当您要实现具有复杂逻辑的customMethod时,使用mongo-template手动实现一些自定义方法。
  3. <强>实施

    第1步:

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

    第2步:

    public class CustomEmployeeRepositoryImpl implements CustomEmployeeRepository{
    
        @Autowired
        private MongoTemplate mongotemplate;
    
        @Override
        List<Employee> CustomEmployeeMethod(String field){
    
        }
    }
    

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

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

    通过这种方式,您可以获得两全其美的效果。有关实施的更多信息,请参阅文档。 希望这会有所帮助。