【问题标题】:How to access DB using DAO in Java如何在 Java 中使用 DAO 访问数据库
【发布时间】:2016-10-07 09:48:44
【问题描述】:

我正在编写一个应该与多个数据库一起使用的微服务。
例如,假设项目 A 正在使用 MongoDB,那么我的服务应该知道如何与 MongoDB(或任何其他 SQL 数据库)连接和工作(查询、保存等)。

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

例如,假设我有这个类:

public class Account {

 private String userName;
 private String firstName;
 private String lastName;
 private String email;
 private int age;

}

从上面的链接得出的结论是,对于我要执行的每个查询,我都需要在 DAO 接口中编写一个函数(如 db 网关),即:

getAccountByEmail(...)
getAccountByUsername(...)
getAccountByUsernameAndEmail(...)

在我看来,这似乎是一种糟糕的方法,会导致需要处理的方法太多。
还有模型不包含的查询字段。例如,如果我的模型有一个创建日期,并且我想在两个日期之间查询对象,我需要一种方法来查询这些字段的数据库。

我已经四处寻找了一段时间,但找不到解决此问题的指南或最佳实践。
我想知道除了实现每个方法之外是否还有其他方法可以解决这个问题。

【问题讨论】:

标签: java sql mongodb data-access-layer


【解决方案1】:

正如 Appolo 在评论中提到的,Spring Data Mongo DB 可能会解决您不必实现每个方法的问题。但是,您仍然可能需要在接口中声明该方法。使用 Spring Data Mongo DB,您首先必须定义应该扩展 MongoRepository 的接口(而不是类)。假设您的主要 id 是字符串,例如:

public Interface AccountDAO extends MongoRepository<Account, String> {
    Account getAccountByEmail(String email);
    Account getAccountByUserName(String userName);
}

请记住,方法中“By”之后的单词应该与模型中的字段匹配。您还可以使用“与”组合多个字段。

Account getAccountByUserNameAndEmail(String userName, String email);

您可以在 MongoDb Spring data documentation 中找到支持的查询关键字。 如果您想要在 Spring Data Mongo DB 中找不到实现的其他方法,请实现您的接口并覆盖它们。

【讨论】:

    猜你喜欢
    • 2013-10-09
    • 1970-01-01
    • 2011-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-10
    • 1970-01-01
    相关资源
    最近更新 更多