spr*_*ner 5 spring-data mongodb-query spring-data-mongodb
我需要在 MongoDB 上编写一些复杂的查询和一些简单的查询。我可以将 MongoRepository 用于简单查询,将 MongoTemplate 与 Query 或 Criteria 一起用于复杂查询实现相同的应用程序。
在相同的应用程序中同时使用 MongoTemplate 和 MongoRepositories 是否是好的设计。这种方法有什么缺点吗。
还有什么是编写包含大量谓词的复杂查询的最佳方法,这些谓词涉及和,或,IN 和 Not In 在单个查询中。
尽管 MongoRepository 比 MongoTemplate 使用起来简单得多,但模板可以让您对正在实施的查询进行更细粒度的控制。
话虽如此,您仍然可以像这样使用 MongoRepository 实现复杂的查询:
@Query("{'id': ?#{ [0] ? {$exists :true} : [1] }}")
List<Person> findByQueryWithExpressionAndNestedObject(boolean param0, String param1);
Run Code Online (Sandbox Code Playgroud)
更多信息可以在这里找到
但作为一种实践,在你的代码中同时拥有两者实际上是好的,那就是
mongo-template当您想要实现具有复杂逻辑的 customMethod 时,请使用 手动实现一些自定义方法。第1步:
interface CustomEmployeeRepository{
List<Employee> CustomEmployeeMethod(String field)
}
Run Code Online (Sandbox Code Playgroud)
第2步 :
@Repository
public class CustomEmployeeRepositoryImpl implements CustomEmployeeRepository{
@Autowired
private MongoTemplate mongotemplate;
@Override
List<Employee> CustomEmployeeMethod(String field){
}
}
Run Code Online (Sandbox Code Playgroud)
第 3 步:现在创建一个新的存储库扩展MongoRepository并CustomEmployeeRepository使用自定义实现以及存储库的预定义方法。
interface EmployeeRepository extends MongoRepository<Employee, long>, CustomEmployeeRepository{
}
Run Code Online (Sandbox Code Playgroud)
这样你就可以两全其美。有关实现的更多信息,请参阅文档。希望这可以帮助。
| 归档时间: |
|
| 查看次数: |
2939 次 |
| 最近记录: |