Spring RowMapper返回列表,但execute返回值将列表大小返回为1? 请在下面找到我的示例代码。行映射器返回一个列表。打印时给我DB中的大小,但当我检查时

Spring RowMapper返回列表,但execute返回值将列表大小返回为1? 请在下面找到我的示例代码。行映射器返回一个列表。打印时给我DB中的大小,但当我检查时,spring,stored-procedures,Spring,Stored Procedures,(List)employeeDaomap.get(“allEmployees”)我得到的列表大小是1,整行是一个项目?为什么执行中出现了什么问题 另外Spring doc说不要使用rs.next(),我们如何获得 数据库中的值 public class MyTestDAO extends StoredProcedure { /** The log. */ static Logger log = Logger.getLogger(MyTestDAO.class); private static

(List)employeeDaomap.get(“allEmployees”)我得到的列表大小是1,整行是一个项目?为什么执行中出现了什么问题

另外Spring doc说不要使用rs.next(),我们如何获得 数据库中的值

public class MyTestDAO extends StoredProcedure {

/** The log. */
static Logger log = Logger.getLogger(MyTestDAO.class);
private static final String SPROC_NAME = "TestSchema.PKG_Test.prc_get_employee_list";
TestRowMapper mapper=new TestRowMapper();

public MyTestDAO(DataSource dataSource){
    super(dataSource, SPROC_NAME);
    declareParameter(new SqlOutParameter("allEmployees", OracleTypes.CURSOR, mapper));
    compile();
}

/**
 * Gets the myemplist data from the DB
 * 
 */
public  List<EmployeeDAO> getEmployeeList()
        throws Exception {

    Map<String,Object> employeeDaomap =new HashMap<String,Object>(); 
    employeeDaomap =execute();
    log.info("employeeDaomap after execute ="+employeeDaomap);
    log.info("employeeDaomap after execute size ="+employeeDaomap.size()); // expected 1
    List<EmployeeDAO> list = (List<EmployeeDAO>) employeeDaomap .get("allEmployees");
    log.info("size of the list ="+list.size()); // need to get the size of the list ,
    return list;
}


private Map<String, Object> execute() {
    return super.execute(new HashMap<String, Object>());
}
}

public class TestRowMapper implements RowMapper<List<EmployeeDAO>> {
static Logger log = Logger.getLogger(TestRowMapper.class);

@Override
public List<EmployeeDAO> mapRow(ResultSet rs, int rowNum)
        throws SQLException {
    // TODO Auto-generated method stub
    rs.setFetchSize(3000);
    List<EmployeeDAO> responseItems = new ArrayList<EmployeeDAO>();
    EmployeeDAO responseItem = null;
    log.info("row num "+rowNum);
    while (rs.next()) {

        responseItem = new EmployeeDAO();
        responseItem.setID(rs.getString("id"));
        responseItem.setName(rs.getString("name"));
        responseItem.setDesc(rs.getString("desc"));
        responseItems.add(responseItem);

    }
    log.info("TestRowMapper items ="+responseItems);
    return responseItems;
}
}
公共类MyTestDAO扩展了StoredProcess{
/**日志*/
静态记录器log=Logger.getLogger(MyTestDAO.class);
私有静态最终字符串存储过程\u NAME=“TestSchema.PKG\u Test.prc\u get\u employee\u list”;
TestRowMapper映射器=新的TestRowMapper();
公共MyTestDAO(数据源数据源){
超级(数据源、存储过程名称);
declareParameter(新的SqlOutParameter(“allEmployees”,OracleTypes.CURSOR,mapper));
编译();
}
/**
*从数据库获取myemplist数据
* 
*/
公共列表getEmployeeList()
抛出异常{
Map employeeDaomap=newhashmap();
employeeDaomap=execute();
log.info(“employeeDaomap after execute=“+employeeDaomap”);
log.info(“在执行size=“+employeeDaomap.size())之后的employeeDaomap;”//应为1
List List=(List)employeeDaomap.get(“allEmployees”);
log.info(“列表的大小=“+list.size());//需要获取列表的大小,
退货清单;
}
私有映射执行(){
返回super.execute(newhashmap());
}
}
公共类TestRowMapper实现了RowMapper{
静态记录器log=Logger.getLogger(TestRowMapper.class);
@凌驾
公共列表映射行(结果集rs,int rowNum)
抛出SQLException{
//TODO自动生成的方法存根
卢比(3000);
List responseItems=new ArrayList();
EmployeeDAO responseItem=null;
log.info(“行数”+行数);
while(rs.next()){
responseItem=新员工Dao();
responseItem.setID(rs.getString(“id”));
responseItem.setName(rs.getString(“name”));
responseItem.setDesc(rs.getString(“desc”));
responseItems.add(responseItem);
}
log.info(“TestRowMapper items=“+responseItems”);
返回响应项;
}
}

解决方案是使用implements ResultSetTextRactor而不是RowMapper,并为extractData提供实现。


公共类TestRowMapper实现ResultTextRactor{
静态记录器log=Logger.getLogger(TestRowMapper.class);
@凌驾
公共列表提取数据(结果集rs)
抛出SQLException、DataAccessException{
卢比(3000);
List responseItems=new ArrayList();
EmployeeDAO responseItem=null;
log.info(“行数”+行数);
while(rs.next()){
responseItem=新员工Dao();
responseItem.setID(rs.getString(“id”));
responseItem.setName(rs.getString(“name”));
responseItem.setDesc(rs.getString(“desc”));
responseItems.add(responseItem);
}
log.info(“TestRowMapper items=“+responseItems”);
返回响应项;
}
}



   public class TestRowMapper implements ResultSetExtractor<List<EmployeeDAO>> {
        static Logger log = Logger.getLogger(TestRowMapper.class);

    @Override
    public List<EMAccountResponse> extractData(ResultSet rs)
			throws SQLException, DataAccessException {
	    rs.setFetchSize(3000);
        List<EmployeeDAO> responseItems = new ArrayList<EmployeeDAO>();
        EmployeeDAO responseItem = null;
        log.info("row num "+rowNum);
        while (rs.next()) {

            responseItem = new EmployeeDAO();
            responseItem.setID(rs.getString("id"));
            responseItem.setName(rs.getString("name"));
            responseItem.setDesc(rs.getString("desc"));
            responseItems.add(responseItem);

         }
        log.info("TestRowMapper items ="+responseItems);
        return responseItems;
	 }
}