之前已经写的都是单行处理,那么如何进行多行处理
多行处理抽象类
首先多行处理抽象类需要继承负责处理的接口,并确定接口的类型为List<T>
抽象类定义为T
/**
* 模板方法模式,把要变化的放到子类中实现,把固定重复的放到父类中反复调用
* 实现ResultSetHandler<List<T>>,这样handler返回类型为List
* 同时handler负责接收数据
* 创建一个抽象方法handleRow负责让子类重写并调用子类对应的单行处理器
*
* @param <T>
*/
public abstract class AbstractListHandler<T> implements ResultSetHandler<List<T>> {
@Override
public List<T> handler(ResultSet resultSet) throws SQLException {
// 创建集合用于接收数据
List<T> list = new ArrayList<>();
// 遍历结果集
while (resultSet.next()) {
// 调用子类实现的单行查询的抽象方法,将数据传入集合中
list.add(handleRow(resultSet));
}
return list;
}
/**
* 单行查询的抽象方法提供给子类实现
* @param resultSet
* @return
* @throws SQLException
*/
public abstract T handleRow(ResultSet resultSet) throws SQLException;
}
javaBean多行处理器BeanListHandler
其他的倒推
public class BeanListHandler<T> extends AbstractListHandler<T>{
private Class<T> clazz;
public BeanListHandler(Class<T> clazz) {
this.clazz = clazz;
}
@Override
public T handleRow(ResultSet resultSet) throws SQLException {
return RowProcessor.toBean(resultSet,clazz);
}
}