gpt4 book ai didi

java 无法创建正确的接口(interface)

转载 作者:行者123 更新时间:2023-12-01 14:35:26 24 4
gpt4 key购买 nike

我想创建一个可以与数据库交互的类,它具有以下所需的功能:

  • 它有一个从数据库返回所有字段的方法,稍后可以更改,以便它也可以限制它的返回。
  • 它有一个方法来插入此类的特定实例。
  • 它有一个方法来更新此类的特定实例。稍后我将在进一步解释后展示代码。

现在我想提取一个接口(interface),或者更确切地说是一个我认为可能更合适的抽象类,以确保所有类/数据字段都遵循相同的“接口(interface)”,并能够将它们用作列表中的父类(super class)型等等

数据类,在本例中为Account.java,应该表示数据库中存储{用户名,密码}的表,我现在省略了一个明确的唯一标识符,仍然不确定是否会创建一个额外的ID字段或使用用户名字段的唯一性。

如果抽象类本身能够处理所有 MySQL 交互“困惑”,那就最好了。

Account.java 到目前为止:

package testthing;

import java.util.Map;

/**
*
* @author Frank
*/
public class Account {
private final static String ALL_QUERY = "SELECT * FROM accounts";
private final static String INSERT_QUERY = "INSERT INTO accounts (username, password) VALUES(?, ?)";
private final static String UPDATE_QUERY = "UPDATE accounts SET password=? WHERE username=?";

private String username;
private String password;

public Account(final String username, final String password) {
this.username = username;
this.password= password;
}

public String getUsername() {
return username;
}

public void setUsername(final String username) {
this.username = username;
}

public String getPassword() {
return password;
}

public void setPassword(final String password) {
this.password = password;
}

public static Map<String, Account> getAll() {
//return a map using the ALL_QUERY string
}

public void insert() {
//insert this using INSERT_QUERY
}

public void update() {
//update this using UPDATE_QUERY
}
}

我知道我恐怕还没有那么清楚,但我希望这足以帮助我继续前进。

基本上,我希望在使用 TableObject始终能够使用以下方法,其中Account将是以下子集:

  • Account.getAll();
  • new Account("test", "test").insert();
  • currentAccount.setPassword("newPassword"); currentAccount.update();

所有令人讨厌的 SQL 内容都应该隐藏在建议的抽象类中。 TableObject中唯一你无法逃脱的事情class 是 SQL 查询的定义。

问候。

编辑:在当前示例中 Account.getAll()返回 Map<String, Account> ,但实际上第一个通用参数应该是数据库中键的类型。因此,如果您要使用唯一 ID,则需要返回 Map<Integer, Account> 。我希望这一更改能让人们及时阅读。

最佳答案

在父类(super class)中拥有连接代码和所有“讨厌的”东西,而只是在父类(super class)中拥有一个由其子类使用的更通用的方法,这不是更合乎逻辑吗?例如:

public void executeUpdate(String query)
{
// Code to execute update.
}

public Map<String, Data> getData(String query)
{
// Code to get data.
return data;
}

这样一来,这些方法就更加通用了。这意味着您可以实现多个仅传递查询数据的类,而不必在每次想要添加新功能时不断更新父类(super class)。

显然,我只是在这里假设了一个类型Data,但这可能是需要研究的内容。这里的目标是尽可能地解耦你的类。这意味着您可以添加任意数量的新类,并且它们可以毫无阻碍地使用其父类(super class)型。

这也意味着诸如

Account.getAll();

稍微简单一些,因为如果您的父类(super class)中有 getAll ,那么您想要获取所有帐户的引用在哪里?如果代码实际上位于 Account 类中,您可以自定义查询,并将其发送到要执行的 getData 方法。

关于java 无法创建正确的接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16529556/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com