DbUtils の BasicRowProcessor は version1.0 の段階では、BeanHandler, BeanListHandler を使ったときに
プロパティ名 = 列名
でないと値が Bean にセットされないので結構不便です。
ということで簡単、シンプルをコンセプトに作ってみました。
import java.beans.IntrospectionException;
import java.beans.PropertyDescriptor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.apache.commons.dbutils.BasicRowProcessor;
import org.apache.commons.dbutils.RowProcessor;
public class ColumnMapRowProcessor implements RowProcessor {
    private static BasicRowProcessor basicProcessor;
    
    static{
        basicProcessor = BasicRowProcessor.instance();
    }
    
    private String[] mapping;
    
    /**
     * コンストラクタ
     * @param mapping
     */
    public ColumnMapRowProcessor(String[] mapping){
        if(mapping == null) throw new IllegalArgumentException();
        
        this.mapping = mapping;     
    }
    
    /**
     * toArray(ResultSet) メソッドは BasicRowProcessor のメソッドを呼び出す。
     * @see org.apache.commons.dbutils.RowProcessor#toArray(java.sql.ResultSet)
     */
    public Object[] toArray(ResultSet rs) throws SQLException {
        return basicProcessor.toArray(rs);
    }
    /**
     * type で指定された Bean を生成し、データベースから取得したデータをセットして返す。
     * データベースのカラムと Bean のプロパティの対応はコンストラクタで指定された
     * 情報に基づく。
     * 
     * @see org.apache.commons.dbutils.RowProcessor#toBean(java.sql.ResultSet, java.lang.Class)
     */
    public Object toBean(ResultSet rs, Class type) throws SQLException {
        
        ResultSetMetaData rsmd = rs.getMetaData();
        if(rsmd.getColumnCount() != mapping.length){
            throw new SQLException("Mapping information is invalid.");
        }
        
        Method[] methods = methods(type);
        
        Object bean = null;
        if(rs.next()){
            bean = createBean(rs, methods, type);
        }
        
        return bean;
    }
    /**
     * データベースから取得した行数分 type で指定された Bean を生成し、
     * 値をセットして List として結果を返す。
     * データベースのカラムと Bean のプロパティの対応はコンストラクタで指定された
     * 情報に基づく。
     * 
     * @see org.apache.commons.dbutils.RowProcessor#toBeanList(java.sql.ResultSet, java.lang.Class)
     */
    public List toBeanList(ResultSet rs, Class type) throws SQLException {
        
        ResultSetMetaData rsmd = rs.getMetaData();
        if(rsmd.getColumnCount() != mapping.length){
            throw new SQLException("Mapping information is invalid.");
        }
        
        Method[] methods = methods(type);
        
        ArrayList list = new ArrayList();
        while(rs.next()){
            list.add(createBean(rs, methods, type));
        }
        
        return list;
    }
    /**
     * toMap(ResultSet) メソッドは BasicRowProcessor のメソッドを呼び出す。
     * @see org.apache.commons.dbutils.RowProcessor#toMap(java.sql.ResultSet)
     */
    public Map toMap(ResultSet arg0) throws SQLException {
        return basicProcessor.toMap(arg0);
    }
    
    /**
     * 取得 ResultSet の各カラムに対応する setter メソッド一覧を取得する。
     * 配列のインデックス 0 は、1 列目のカラムに対応する。
     * 
     * @param type Bean の Class
     * @return ResultSet のカラムと対応する Method の配列
     * @throws SQLException Bean に対応するメソッドが見つからなかったとき
     */
    private Method[] methods(Class type) throws SQLException{
        
        Method[] methods = new Method[mapping.length];
        
        for(int i=0; i<mapping.length; i++){
            try {
                PropertyDescriptor prop = new PropertyDescriptor(mapping[i], type);
                methods[i] = prop.getWriteMethod();
            } catch (IntrospectionException e) {
                throw new SQLException("Bean introspection failed:" + e.getMessage());
            }
        }
        return methods; 
    }
    
    /**
     * Bean を生成しデータベースから取得した値をセットする。
     * 
     * @param rs ResultSet
     * @param methods Bean の setter メソッド
     * @param type Bean のクラス
     * @return 生成した Bean
     * @throws SQLException Bean の生成に失敗したとき,
     *          setter の呼び出しに失敗したとき, 
     *          データベース読み出し中に例外が発生したとき
     */
    private Object createBean(ResultSet rs, Method[] methods, Class type) throws SQLException{
                
        Object bean = null;
        try {
            bean = type.newInstance();
        } catch (InstantiationException e) {
            throw new SQLException(
                "Cannot create " + type.getName() + ": " + e.getMessage());
        } catch (IllegalAccessException e) {
            throw new SQLException(
                "Cannot create " + type.getName() + ": " + e.getMessage());
        }
        
        
        for(int i=0; i<methods.length; i++){
            
            Object value = rs.getObject(i+1);
            try {
                Class[] parameter = methods[i].getParameterTypes();
                if(!(parameter[0].isPrimitive() && value == null)){
                    methods[i].invoke(bean, new Object[]{value} );
                }
            } catch (IllegalArgumentException e) {
                throw new SQLException(
                     "Cannot set " + methods[i].getName() + ": " + e.getMessage());
            } catch (IllegalAccessException e) {
                throw new SQLException(
                     "Cannot set " + methods[i].getName() + ": " + e.getMessage());
            } catch (InvocationTargetException e) {
                throw new SQLException(
                     "Cannot set " + methods[i].getName() + ": " + e.getMessage());
            }
        }
        
        return bean;
        
    }
}
結局、取得結果列と Bean のプロパティとの結びつきはプロパティ名の配列をコンストラクタに渡すことにしました。
配列の先頭がデータベース取得結果列の 1 列目に対応しているという安直さです。
実際に使ってみたときのコードは次のようになります。
TestBean のプロパティ param2 にデータベースからの取得結果 NAME 列の値を、
param1 には ID 列の値がセットされるイメージの例です。
String[] props = {"param2", "param1"};
ColumnMapRowProcessor processor = new ColumnMapRowProcessor(props);
BeanListHandler handler = new BeanListHandler(TestBean.class, processor);
QueryRunner runner = new QueryRunner();
String sql = "SELECT NAME, ID FROM PRODUCT";
List result = (List) runner.query(connection, sql, handler);
◎参考
The Apache Jakarta Project
・・・本家。バイナリ、ソースコードやその他の情報が手に入ります。