使用jdbctemplate查询数据,rowmapper使用BeanPropertyRowMapper.newInstance(String.class)查询不到数据问题

1、背景

项目有个功能是删除数据1的同时要删除关联数据2,删除1前会查询数据2的id,使用的语法就是

namedParameterJdbcTemplate.query(sqlBuilder.toString(), params, BeanPropertyRowMapper.newInstance(String.class))

2、分析

  • 如上语法中RowMapper使用的BeanPropertyRowMapper.newInstance(String.class)
  • 但是断点后提取的sql语句在数据能查询出数据,代码namedParameterJdbcTemplate.query却查询不到具体数据,可以看到能够查到有一条数据,但是查询不到具体的值

  • 更换一种查询方式却能查询到具体的数据

  • 继续分析,查看BeanPropertyRowMapper.newInstance源码可以看到这里必须有写方法才能给字段赋值,而String.class类是没有写方法的,没办法赋值

  • 打断点查看,当要转成的类型使用String.class时确实不存在writeMethod

3、总结

  • 综上BeanPropertyRowMapper.newInstance个人认为只适合查询转为对象类的,并不适合基础类型,如String
  • 如果需要查询非对象结果的建议更换使用org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate#queryForList(java.lang.String, org.springframework.jdbc.core.namedparam.SqlParameterSource, java.lang.Class)
  • 特此记录,避免再次踩坑
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值