java - 如何在Java中使用DAO访问DB

标签 java sql mongodb data-access-layer

我正在编写一个应该与多个数据库一起使用的微服务。
例如,假设项目 A 正在使用 MongoDB,那么我的服务应该知道如何使用 MongoDB(或任何其他 SQL 数据库)。

我已阅读thisOracle 编写的文档解释了 DALDAO 模型,但据我了解,我需要为我的每种查询实现每种方法想要执行。

例如,假设我有这样的类(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/

相关文章:

java - 在java中将KB转换为MB

Java重复模式匹配(二)

mysql - 奇怪的查询,不确定是否需要嵌套?这是怎么回事?

linux - 如何定期备份mongodb数据库,一天中的特定时间

ruby-on-rails - 查询 Mongoid/rails 3 ("Lower than"中的嵌入对象,最小运算符和排序)

java - 不可序列化 session websocket java ee

java - 如何使用 fragment (Android)在 Activity 之间保留动态Arraylist元素

c# - 如何通过一次调用使用 mongodb C# 驱动程序添加嵌套元素或更新属性

sql - 使用 VBA 在 Excel 中查询 SQL Server 表

mysql - 两个数字相减,乘以另一个数字,将此结果添加到日期,然后将其转换为日期