在 MyBatis 中“字段映射错”是非常常见的问题,通常不是 MyBatis 本身的 bug,而是配置或约定不一致导致的。下面按最常见原因 → 解决方案给你系统梳理一遍。
数据库字段:user_name
Java 属性:username
结果:username 为 null
MyBatis 默认按同名映射,不会自动把 user_name 转成 userName
SELECT user_name AS userName FROM user
resultMap<resultMap id="userMap" type="User">
<result column="user_name" property="username"/>
</resultMap>
<select id="selectUser" resultMap="userMap">
SELECT user_name FROM user
</select>
mybatis:
configuration:
map-underscore-to-camel-case: true
<select id="getUser" resultType="map">
但你却在 Java 里当对象用
resultType="com.xxx.User"resultType="map"resultMap| 数据库 | Java |
|---|---|
| tinyint | Boolean |
| bigint | Long |
| decimal | BigDecimal |
如果类型不对,可能:
0 或 false✅ 确保 JDBC Type ↔ Java Type 匹配
@TableField / @Column 但没生效@TableField("user_name")
private String username;
但:
resultType✅ 原生 MyBatis 不认识 @TableField
<select id="getUser" resultType="User">
但你有 resultMap 却没引用
✅ 必须:
resultMap="userMap"
@AllArgsConstructor 但字段顺序错MyBatis 可能调用构造函数导致映射错乱
✅ 建议:
@Builder + @NoArgsConstructorresultType="User" 报错或映射失败
✅ 确保配置了:
mybatis:
type-aliases-package: com.xxx.entity
<if test="username != null">
user_name = #{username}
</if>
但参数名其实是 userName
map-underscore-to-camel-caseresultMap如果你愿意,可以把具体 SQL + 实体类 + 映射结果贴出来,我可以直接帮你定位是哪一条原因。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。