我正在编写一个应该与多个数据库一起使用的微服务。
例如,假设项目 A 正在使用 MongoDB
,那么我的服务应该知道如何使用 MongoDB
(或任何其他 SQL
数据库)。
我已阅读this由 Oracle
编写的文档解释了 DAL
和 DAO
模型,但据我了解,我需要为我的每种查询实现每种方法想要执行。
例如,假设我有这样的类(class):
public class Account {
private String userName;
private String firstName;
private String lastName;
private String email;
private int age;
}
从上面的链接得出的结论是,对于我想要执行的每个查询,我需要在 DAO 接口(interface)(如数据库网关)中编写一个函数,即:
getAccountByEmail(...)
getAccountByUsername(...)
getAccountByUsernameAndEmail(...)
在我看来,这是一种糟糕的方法,会导致需要处理太多方法。
还有模型不包含的查询字段。例如,如果我的模型有一个创建日期,并且我想查询两个日期之间的对象,我需要一种方法来查询数据库中的这些字段。
我已经四处寻找了一段时间,但找不到解决此问题的指南或最佳实践。
我想知道除了实现每个方法之外是否还有其他方法可以解决这个问题。
最佳答案
正如 Appolo 在评论中提到的,Spring Data Mongo DB 可能会解决您不必实现每个方法的问题之一。但是,您仍然可能需要在接口(interface)中声明该方法。使用 Spring Data Mongo DB,首先必须定义应扩展 MongoRepository 的接口(interface)(而不是类)。假设您的主 ID 是字符串,例如:
public Interface AccountDAO extends MongoRepository<Account, String> {
Account getAccountByEmail(String email);
Account getAccountByUserName(String userName);
}
请记住,方法中“By”后面的单词应与模型中的字段匹配。您还可以使用“And”组合多个字段。
Account getAccountByUserNameAndEmail(String userName, String email);
可以在MongoDb中找到支持查询的关键词Spring data documentation 。 如果您需要在 Spring Data Mongo DB 中找不到实现的其他方法,您可以实现您的接口(interface)并覆盖它们。
关于java - 如何在Java中使用DAO访问DB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37680258/