jdbcTemplate爬坑之queryForList---Incorrect column count: expected 1, actual 2

953 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。 先看看jdbcTemplate.queryForList这个方法,有7个传参形式,我们就看第一个,我也就是被第一个坑了下,以我图片中的代码为例,我想查询出所有的user,我用jdbcTemplate,他既然提供了queryForList接口,并且支持传一个class类型进去,那么这不就是告诉我这个方法可以直接返回List<User>嘛,我也是这么做的: 在这里插入图片描述 但是当我运行之后结果却是: 在这里插入图片描述诶?啥意思,期望返回一列,实际返回两列?但是select * FROM USER 确实是应该返回两列啊,我实际场景的sql比这个复杂,我最开始以为是sql的问题,结果去检查了sql确认sql没问题,然后再去看queryForList这个方法才发现问题: 在这里插入图片描述 what???getSingleColumnRowMappersingleColumnRowMapper,感情构建的mapper只有一个列啊? 看下报错的地方: 在这里插入图片描述 返回结果列不等于1就抛异常,好吧,看来singleColumnRowMapper这个不能拿来查对象了,那怎么办呢? 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 看起来就是这样了,所以我们的实现代码应该是: 在这里插入图片描述 既然这样,那queryForList是干嘛的呢? 在这里插入图片描述 总结: queryForList只支持返回单列对象结果,或者返回List<Map<String,Object>>自己去组对象,如果想直接返回对象集合,用query(sql, BeanPropertyRowMapper.newInstance(T.class));