BeanPropertyRowMapper无法获取下划线命名字段,不修改setter如何解决?
问题根因
BeanPropertyRowMapper的下划线转驼峰映射能力默认处于关闭状态,官方文档描述的转换规则需要主动开启配置才会生效- 你设置了
setPrimitivesDefaultedForNullValue(true),当字段映射失败取值为null时,数值类型的基础数据会被自动赋值为默认值0,这就是你实际值不为0但始终拿到0的原因
解决方案(无需修改setter,无需自定义RowMapper)
方案1:开启内置下划线转驼峰开关
初始化BeanPropertyRowMapper后添加一行配置即可,开启后会自动将下划线格式的数据库字段名转换为驼峰格式匹配实体类属性:
BeanPropertyRowMapper<ClassName> rowMapper = new BeanPropertyRowMapper<>(ClassName.class); rowMapper.setPrimitivesDefaultedForNullValue(true); // 新增这行开启下划线转驼峰 rowMapper.setUnderscoreToCamelCase(true); List<ClassName> c = jdbcTemplate.query(sql, rowMapper);
开启后ca_2008会自动转换为ca2008,和标准JavaBean规范的setCa2008 setter方法正常匹配。如果你的原有setter是不符合规范的全小写setca2008,建议调整为标准驼峰命名即可,不需要修改属性名。
方案2:SQL字段别名适配
如果仅个别字段需要适配,或者不想调整setter命名,也可以直接在查询SQL中给下划线字段指定对应格式的别名,不需要修改RowMapper配置:
select ca_2008 as ca2008, ca_2009 as ca2009, 其他字段 from 表名
总结
不需要自定义RowMapper实现,通过上述两种内置方案即可在不修改原有业务逻辑的前提下完成字段映射。
内容的提问来源于stack exchange,提问作者BA23AC
相关产品推荐
相关产品推荐

