在Spring Boot 中使用Spring的JdbcTemplate操縱數(shù)據(jù)一文中其實(shí)已經(jīng)詳細(xì)的講解了JdbcTemplate的使用用法,但是還是想將坑單拎出來(lái)講下。
首先看下這個(gè)方法:

乍一看,我想傳個(gè)泛型T(實(shí)際代碼執(zhí)行中,這個(gè)T可以是我自定義的一個(gè)Bean),然后就能返回個(gè)List<T>,也即泛型的集合(純ORM思想啊!殊不知又挖了個(gè)大坑~)
于是乎,出現(xiàn)下面代碼:
List<Student> list = jdbcTemplate.queryForList(sql, Student.class);
一執(zhí)行,發(fā)現(xiàn)出異常了:
ERROR org.springframework.jdbc.IncorrectResultSetColumnCountException: Incorrect column count: expected 1, actual 8:Incorrect column count: expected 1, actual 8
異常很明了,需要一個(gè),給人家整成了八個(gè),也就是人家不是存List<>的。甚為蹊蹺,后一查,發(fā)現(xiàn)不是這樣的,又跑偏了~

原來(lái)這個(gè)T,只支持Integer.class String.class 這種單數(shù)據(jù)類型的,自己定義的Bean不支持。所以我這ORM的想法over了。
敢情如果有封裝成某個(gè)對(duì)象的需求,還得自己動(dòng)手 。
這個(gè)JdbcTemplate還真是無(wú)力吐槽~ 彷佛回來(lái)了上古時(shí)期~!
//可以用這個(gè)
List<T> result = jdbcTemplate.query(sql.toString(), new Object[] {queryPara},
new BeanPropertyRowMapper<T>(T.class))
同時(shí),我還發(fā)現(xiàn)不僅是jdbcTemplate.queryForList不能這么使用,queryForObject同樣也不能這么使用,而是應(yīng)該添加new RowMapper接口才能返回自定義的實(shí)體類對(duì)象。
看到一篇比較詳盡的博客:Spring jdbcTemplate中queryForObject以及queryForList返回映射實(shí)體使用。