使用JdbcTemplate遇到的坑

今天项目中导数据,项目集成的是JPA,但由于获取数据用到了很多关联等原因,所以在获取数据的时候我用了JdbcTemplate,但就是这个,我遇到了一个坑。


JdbcTemplate有个queryForList()方法,返回的是List,但返回的标准格式是List>这个玩意,而我需要返回的是类似与List这样的,如果返回上面的就需要经过转换,而且数据又有接近百万条,所以想直接就获取出来,所以去看了一下JdbcTemplate的方法源码,看到:

public  List queryForList(String sql, Class elementType) throws DataAccessException {
    return this.query(sql, this.getSingleColumnRowMapper(elementType));
}

可以看到这个方法可以指定一个泛型的类,会自动转换,进坑了,一运行就:

ERROR [com.ruhuiyun.studentmanager.aop.LogAdvice] 
- org.springframework.jdbc.IncorrectResultSetColumnCountException: Incorrect column count: expected 1, actual 8:
Incorrect column count: expected 1, actual 8

报错了, 异常很明了,需要一个,给人家整成了八个,也就是人家不是存List的。一查原来Class只支持单数据类型,例如String、Integer,对于自己定义的Bean不支持:


JdbcTemplate.png

好在JdbcTemplate还有个query()方法,给你想要返回的(即自己封装的dto)加上一层映射即可,使用:

new BeanPropertyRowMapper(Class clazz)
List list = jdbcTemplate.query(sb.toString(), new BeanPropertyRowMapper(DataToCompany.class));

你可能感兴趣的:(使用JdbcTemplate遇到的坑)