自定义映射器类没有得到结果?

时间:2016-11-26 15:01:17

标签: java spring-jdbc

我正在编写DAO应用程序,我想获取区域数据。我已经编写了自己的mapper类。我无法获得价值。这是一个例外。

Mapper类

public class zoneMapper implements RowMapper {

    @Override
    public Object mapRow(ResultSet resultSet, int rowNum) throws SQLException {

         ZoneBean zone=new ZoneBean();
        zone.setZoneId(resultSet.getInt("ZONE_ID"));
        zone.setZoneName(resultSet.getString("ZONE_NAME"));
        return zone;

    }

dao call

List<ZoneBean> zoneList=new ArrayList<ZoneBean>();
        try {
             JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);

             zoneList = (List<ZoneBean>) jdbcTemplate.queryForObject(
                     queriesConstants.GET_ZONES, new zoneMapper());
             }catch(Exception e){
            System.out.println("getZones "+e.getMessage());
            //logger.error("getZones "+e.getMessage());
        }
 **Exception is**
 getZones Incorrect result size: expected 1, actual 17

1 个答案:

答案 0 :(得分:2)

  

getZones结果大小不正确:预期为1,实际为17

执行查询时检索多个元素。

因此,

public <T> T queryForObject(String sql, RowMapper<T> rowMapper)不适合您的需要,因为它在给定静态SQL的情况下执行查询,通过RowMapper将单个结果行映射到Java对象。

你应该使用这种方法:

public <T> List<T> query(String sql, RowMapper<T> rowMapper)执行给定静态SQL的查询,通过RowMapper将每行映射到Java对象。