Spring JdbcTemplate的queryForList(String sql , Class<T> elementType)返回非映射实体类的解决方法

本文揭示了在使用Spring JdbcTemplate时,尝试通过泛型获取自定义Bean集合的常见错误,并提供了解决方案。作者原本期望通过泛型直接获取自定义Bean的集合,但遇到了类型不匹配的异常。文章详细解释了JdbcTemplate对泛型的支持限制,并分享了一个实用的映射技巧,通过BeanPropertyRowMapper实现自定义类型的数据转换。
部署运行你感兴趣的模型镜像

 一直用ORM,今天用JdbcTemplate再次抑郁了一次。

           首先看下这个方法:

          乍一看,我想传个泛型T(实际代码执行中,这个T可以是我自定义的一个Bean),然后就能返回个List<T>,也即泛型的集合(纯ORM思想啊!殊不知又挖了个大坑~)

          于是乎,出现下面代码:

 

  1. List<Student> list = jdbcTemplate.queryForList(sql, Student.class);  


          一执行,发现出异常了:

 

         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的。甚为蹊跷,后一查,发现不是这样的,又跑偏了~

        原来这个T,只支持Integer.class String.class 这种单数据类型的,自己定义的Bean不支持。

 解决方法:给你想要返回的(即自己封装的dto)加上一层映射即可

            StringBuffer sbItem=new StringBuffer();
            sbItem.append("select * from wsbs_person_pay_item where payid="+ppayDTO.getId());
            List<PersonPayItemDTO> ppItemList=jdbctemplate.query(sbItem.toString(),new BeanPropertyRowMapper(PersonPayItemDTO.class));

您可能感兴趣的与本文相关的镜像

Langchain-Chatchat

Langchain-Chatchat

AI应用
Langchain

Langchain-Chatchat 是一个基于 ChatGLM 等大语言模型和 Langchain 应用框架实现的开源项目,旨在构建一个可以离线部署的本地知识库问答系统。它通过检索增强生成 (RAG) 的方法,让用户能够以自然语言与本地文件、数据库或搜索引擎进行交互,并支持多种大模型和向量数据库的集成,以及提供 WebUI 和 API 服务

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值