我正在一个Java(Web)应用程序中进行数据库的DAO实现。只是我遇到了点小问题。
当前代码:
Account.java:
package beans;
public class Account {
private int accountId;
private String name;
private String password;
private String email;
public Account() {
}
public Account(final String name, final String password, final String email) {
this.name = name;
this.password = password;
this.email = email;
}
public int getAccountId() {
return accountId;
}
public void setAccountId(int accountId) {
this.accountId = accountId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
DAO.java:
package dao;
import java.util.Collection;
public interface DAO<T> {
public int insert(T t);
public boolean update(T t);
public T get();
public Collection<T> search();
public boolean delete(T t);
}
AccountDAO.java:
package dao;
import beans.Account;
import java.util.Collection;
public class AccountDAO implements DAO<Account> {
@Override
public int insert(Account t) {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public boolean update(Account t) {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public Account get() {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public Collection<Account> search() {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public boolean delete(Account t) {
throw new UnsupportedOperationException("Not supported yet.");
}
}
问题是,我很确定我不想在DAO
接口中使用SQL字符串,但接下来我会遇到如何正确实现get()
和search()
的问题?
由于它是一个通用接口,我还不能使用列名,我想将get()
和search()
方法保留在接口中,以确保它们将被实现,除非真的有必要将它们从接口中删除。
我的建议是通过一个范围或一个未完全填充的T类对象进行搜索。因此,如果你想获得name=x的帐户,那么你会有这样的代码:
AccountDAO accountDAO = DAOFactory.getAccountDAO();
Account result = accountDAO.get(new Account(x, null, null));
但我不确定这是否是最好的解决方案,请帮助我。
问候。
1条答案
按热度按时间50few1ms1#
这就是我如何处理我的:
我创建了一个接受SQL查询的抽象类
NativeQueryBasedDAO
。这样,我就可以拥有扩展NativeQueryBasedDAO
的子类,这些子类表示每个RDBMS(如MySQL、DB2、PostGres等)。在你的情况下,你会有这样的效果:
上面的字段可以帮助你在方法,如
get()
,你需要得到一个基于你的schemaName + tableName
的对象。然后,我将有一个
Factory<T>
,它有一个public T create()
,它创建一个对象(在您的情况下,是帐户)。因此,基于一些
Parameters, you can pass/generate a
工厂,将生成一个对象。 然后,您可以修改
DAO以执行
get(Criteria criteria),该
get(Criteria criteria)构建
Factory`,并使用参数填充以创建对象。简而言之,它不是一个简单的解决方案(因为它必须是健壮的,并且可以根据您的需求进行扩展)。ORM,如Hibernate或JPA实现(例如TopLink)处理这个。
希望这能帮上忙。