You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MyBatis查询address_id返回0,请求代码审查排查问题

解决MyBatis中address_id映射为0的问题

嘿,这个坑我之前踩过!问题根源是数据库字段和Java实体类属性的命名映射不匹配,咱们来一步步解决:

问题原因

数据库里的字段是下划线命名的address_id,但你的AddressID类里对应的属性是驼峰式的addressId。MyBatis默认不会自动将下划线分隔的字段名转换为驼峰式的属性名,所以当它找不到和address_id匹配的属性时,就会给int类型的addressId赋值默认值0,而postcode因为字段名和属性名完全一致,所以能正常映射。

两种快速解决方案

方案1:开启MyBatis驼峰命名自动映射

这是一劳永逸的方法,适合整个项目的下划线转驼峰需求:

  • 如果是Spring Boot项目,在配置文件中添加:
    • 若用.properties:
      mybatis.configuration.map-underscore-to-camel-case=true
      
    • 若用.yml:
      mybatis:
        configuration:
          map-underscore-to-camel-case: true
      

开启后,MyBatis会自动把address_id这类下划线字段映射到addressId这种驼峰属性上。

方案2:在SQL中给字段起别名

如果你只想针对这个查询做映射,直接修改SQL语句,给address_id起一个和属性名一致的别名:

@Select("SELECT address_id AS addressId, postcode FROM table1 WHERE custom_field_1 = #{caseid}")
public List<AddressID> getAddressIdPostCodeList(String caseid);

这样MyBatis就能明确把查询到的address_id值赋值给addressId属性了。

额外验证建议

可以修改AddressID的toString方法,把addressId也包含进去,这样测试时能直接看到映射结果:

@Override
public String toString() {
    return "AddressID{addressId=" + addressId + ", postcode='" + postcode + "'}";
}

内容的提问来源于stack exchange,提问作者user8181539

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:55:01