我目前有一段代码,从数据库中检索数据并创建一个
User
。这段代码被用于许多类中,以创建其他对象,例如News
,Comments
等等... 它使用了apache commons dbutils。final ResultSetHandler<User> handler = new ResultSetHandler<User>() {
@Override
public User handle(ResultSet rs) throws SQLException {
User user = null;
if (rs.next()) {
user = new User();
user.setId(rs.getInt("id"));
user.setUsername(rs.getString("username"));
user.setPassword(rs.getString("password"));
}
return user;
}
};
final User user = run.query(
"SELECT id, username, password FROM users WHERE username = ? AND active = 2 LIMIT 1;", handler,
username);
是否可以将QueryRunner
包装在一个通用类中,并覆盖查询方法,使处理程序使用ResultSet实例化通用T
。我会确保任何T
类型都有一个接受ResultSet
的构造函数。
像这样:
public class QueryExecuter<T> extends QueryRunner {
private ResultSetHandler<T> _handler;
public QueryExecuter(){//The T type was for testing haha
super();
handler = new ResultSetHandler<T>() {
@Override
public T handle(ResultSet rs) throws SQLException {
T object = null;
if (rs.next()) {
object = new T(rs);
}
return object;
}
};
}
}
我不知道您是否能够理解,但我希望能够。如果需要更多细节或更好的解释,请问我。
编辑
我认为我可以使用抽象类来替代所有不同对象都会扩展的通用类型,但似乎我无法编写抽象构造函数。我是否需要编写一个静态方法来返回对象实例,例如:
public abstract class DatabaseEntity {
public static abstract DatabaseEntity create(ResultSet rs);//even this doesn't work...
}