【问题标题】:Can we use both MongoRepository and MongoTemplate in same application我们可以在同一个应用程序中同时使用 MongoRepository 和 MongoTemplate
【发布时间】:2018-10-15 13:57:40
【问题描述】:

我需要在 MongoDB 上编写一些复杂的查询和一些简单的查询。我可以将 MongoRepository 用于简单查询,将 MongoTemplate 与 Query 或 Criteria 一起用于复杂查询实现相同的应用程序吗?

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

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

【问题讨论】:

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


    【解决方案1】:

    虽然 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{
    }
    

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

    【讨论】:

    • CustomEmployeeRepositoryImpl 应该使用 @Repository 注释以获得有效的 mongoTemplate
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-25
    • 1970-01-01
    • 2020-02-27
    相关资源
    最近更新 更多