我不确定这是“最佳实践”,但我建议采用以下方法(不使用 bean 属性--> 应该更快)。
通常你知道你期望检索什么样的对象。所以你可以在执行 sql 时提供相应的行映射器。
声明自定义抽象通用 RowMapper 并为每种类型的人创建自己的行映射器,即:
private static abstract class PersonRowMapper<T extends Person> implements RowMapper<T> {
@Override
public abstract T mapRow(ResultSet rs, int rowNum) throws SQLException;
protected void mapBase(ResultSet rs, T person) throws SQLException {
//base mapping here
}
}
private static class EmployeeRowMapper extends PersonRowMapper<Employee> {
@Override
public Employee mapRow(ResultSet rs, int rowNum) throws SQLException {
Employee e = new Employee();
mapBase(rs, e);
//set other specific employee props
}
}
通过其他方法,您可以在基本映射器中为特定道具声明抽象方法,即
private static abstract class PersonRowMapper<T extends Person> implements RowMapper<T> {
@Override
public T mapRow(ResultSet rs, int rowNum) throws SQLException {
T instance = getInstance();
//set base props here
fill(rs, instance);
}
//e.g. return new Employee()
protected abstract T getInstance();
//fill specific instance props
protected abstract void fill(ResultSet rs, T instance) throws SQLException;
}