当前位置: 首页 > 知识库问答 >
问题:

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

徐景明
2023-03-14

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

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

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

共有1个答案

梁丘成和
2023-03-14

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

话虽如此,您仍然可以在使用MongoRepository时实现复杂的查询,如下所示:

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

更多信息可以在这里找到

但是作为一种实践,在你的代码中同时拥有两者实际上是很好的,也就是说

  1. 如果要使用已实现的存储库,请使用存储库
  2. 如果要实现具有复杂逻辑的customMethod,请使用mongo模板手动实现一些自定义方法

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

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

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

 类似资料:
  • 问题内容: 我正在使用Flamingo功能区和Substance Office 2007外观。 当然,现在 每个 控件都具有这种外观,即使对话框上也是如此。 我想要的是Office 2007中的功能,功能区具有Office 2007的外观,但其他控件保留其本机Vista / XP的外观。 是否可以为某些控件分配不同的外观?也许使用某种链接或代理外观? 问题答案: 我刚刚发现:由于物质5.0的SKI

  • 必需的URL:https://learn . Microsoft . com/en-us/azure/active-directory/develop/application-consent-experience https://login.microsoftonline.com/common/adminconsent?客户端id = {应用程序Id} 请帮帮忙

  • 问题内容: 我可以在同一输出流上同时使用PrintWriter和BufferedOutputStream吗? 情况是这样的: 我有一个SSLSocket程序,我希望能够在不同的时间点轻松地在套接字上同时传输字符串和字节[],而不必将byte []转换为字符串等,但是,PrintWriter仅允许我传输字符串和BufferedOutputStream只允许我传输字节。 问题答案: PrintWrit

  • 问题内容: 我想计算mysql表中的行数,而不要包含重复的条目, 我可以用吗? 问题答案: 当然。

  • 我想在一个项目中使用两种方法(反应式和标准式)。 我尝试将一个REST APIendpoint迁移到反应式webflux,并在迁移其余endpoint之前测试性能。但没用。我为他添加了路由器和处理程序,但直到我没有从依赖项中删除,并禁用之前,我一直得到http代码。有没有可能?还是我应该将所有项目迁移到反应式方法?

  • 问题内容: 我当前正在开发一个使用JDI连接到已经运行的“目标” java应用程序的“调试器” java应用程序。有什么方法可以让Ant启动目标应用程序,然后在第一个应用程序仍在运行时启动“调试器”? 是的,我知道我可以开发JDI应用程序来启动目标程序,但这不是我现在想要的。 问题答案: 您可以从Ant 并行 任务中生成两个Java程序。 第二个线程中的 睡眠 任务可以由 waitfor 条件替换