代码之家  ›  专栏  ›  技术社区  ›  springbootlearner

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

  •  5
  • springbootlearner  · 技术社区  · 6 年前

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

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

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

    1 回复  |  直到 6 年前
        1
  •  9
  •   Antariksh    4 年前

    虽然MongoRepository比MongoTemplate简单得多,但template为您提供了对正在实现的查询的更细粒度控制。

    尽管如此,您仍然可以使用MongoRepository实现复杂的查询,如下所示:

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

    有关的更多信息,请参见 here

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

    1. 如果要使用已实现的存储库,请使用存储库。
    2. 使用 mongo-template 当您想要实现具有复杂逻辑的customMethod时。

    实施

    步骤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: 现在创建一个新的存储库扩展 MongoRepository CustomEmployeeRepository 使用存储库的自定义实现和预定义方法。

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

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