我们可以在同一个应用程序中同时使用 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
上找到更多信息
但作为一种实践,在您的代码中同时包含两者实际上是好的,即
- 当你想使用已经实现的存储库时使用它。
- 当您想实现具有复杂逻辑的 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 步:
现在创建一个扩展 MongoRepository
和 CustomEmployeeRepository
的新存储库,以使用存储库的自定义实现和预定义方法。
interface EmployeeRepository extends MongoRepository<Employee, long>, CustomEmployeeRepository{
}
这样您就可以两全其美。有关实施的更多信息,请参阅文档。
希望这有帮助。
我需要在 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
上找到更多信息但作为一种实践,在您的代码中同时包含两者实际上是好的,即
- 当你想使用已经实现的存储库时使用它。
- 当您想实现具有复杂逻辑的 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 步:
现在创建一个扩展 MongoRepository
和 CustomEmployeeRepository
的新存储库,以使用存储库的自定义实现和预定义方法。
interface EmployeeRepository extends MongoRepository<Employee, long>, CustomEmployeeRepository{
}
这样您就可以两全其美。有关实施的更多信息,请参阅文档。 希望这有帮助。