我想创建一个可以与数据库交互的类,它具有以下所需的功能:
- 它有一个从数据库中返回所有字段的方法,以后可以更改,这样它也可以限制它的返回。
- 它有一个插入此类特定实例的方法。
- 它有一个方法来更新这个类的特定实例。在进一步解释之后,我将在稍后展示代码。
现在我想提取一个接口,或者我认为可能更合适的抽象类,以确保所有类/数据字段都遵循相同的“接口”,并能够将它们用作列表等中的超类型。
数据类,在本例中为 Account.java,应该表示存储 {Username, Password} 的数据库中的一个表,我现在省略了一个明确的唯一标识符,仍然不确定我是否会创建一个额外的 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
}
}
我知道我并没有那么清楚,但我希望这足以帮助我继续前进。
基本上,我希望在使用 a 时始终能够使用以下方法TableObject
,这Account
将是以下方法的子集:
Account.getAll();
new Account("test", "test").insert();
currentAccount.setPassword("newPassword"); currentAccount.update();
所有讨厌的 SQL 东西都应该隐藏在提议的抽象类中。唯一不能在TableObject
类中转义的是 SQL 查询的定义。
问候。
编辑:在当前示例中Account.getAll()
返回 a Map<String, Account>
,但实际上第一个通用参数应该是数据库中键的类型。因此,如果您要使用唯一 ID,那么它需要返回一个Map<Integer, Account>
. 我希望这种变化能让人们及时阅读它。