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
相关产品推荐
相关产品推荐

