虽然 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{
}
这样您就可以两全其美。有关实施的更多信息,请参阅文档。
希望这会有所帮助。