温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java mybatis为何字段映射错

发布时间:2026-09-02 18:55:18 来源:亿速云 阅读:93 作者:小樊 栏目:编程语言

MyBatis 中“字段映射错”是非常常见的问题,通常不是 MyBatis 本身的 bug,而是配置或约定不一致导致的。下面按最常见原因 → 解决方案给你系统梳理一遍。


一、数据库字段 vs Java 属性名不一致(最常见)

现象

数据库字段:user_name
Java 属性:username
结果:usernamenull

原因

MyBatis 默认按同名映射,不会自动把 user_name 转成 userName

解决方案

✅ 方案 1:SQL 中起别名(最常用)

SELECT user_name AS userName FROM user

✅ 方案 2:使用 resultMap

<resultMap id="userMap" type="User">
    <result column="user_name" property="username"/>
</resultMap>

<select id="selectUser" resultMap="userMap">
    SELECT user_name FROM user
</select>

✅ 方案 3:开启驼峰自动映射(推荐)

mybatis:
  configuration:
    map-underscore-to-camel-case: true

二、resultType 用错

错误示例

<select id="getUser" resultType="map">

但你却在 Java 里当对象用

正确方式

  • 返回实体 → resultType="com.xxx.User"
  • 返回 Map → resultType="map"
  • 复杂映射 → 必须用 resultMap

三、数据库字段为 NULL 或类型不匹配

例子

数据库 Java
tinyint Boolean
bigint Long
decimal BigDecimal

如果类型不对,可能:

  • 映射失败
  • 数值异常
  • 被当成 0false

✅ 确保 JDBC Type ↔ Java Type 匹配


四、使用了 @TableField / @Column 但没生效

MyBatis-Plus 常见错误

@TableField("user_name")
private String username;

但:

  • 没引入 MyBatis-Plus
  • 用了原生 MyBatis
  • XML 里又写了 resultType

✅ 原生 MyBatis 不认识 @TableField


五、resultMap 写错或没用上

常见错误

<select id="getUser" resultType="User">

但你有 resultMap 却没引用

✅ 必须:

resultMap="userMap"

六、构造函数 / Lombok 问题

情况 1:用了 @AllArgsConstructor 但字段顺序错

MyBatis 可能调用构造函数导致映射错乱

✅ 建议:

  • 提供无参构造
  • 或用 @Builder + @NoArgsConstructor

七、别名 / 包扫描问题

现象

resultType="User" 报错或映射失败

✅ 确保配置了:

mybatis:
  type-aliases-package: com.xxx.entity

八、动态 SQL 拼错字段

<if test="username != null">
  user_name = #{username}
</if>

但参数名其实是 userName


快速自查清单 ✅

  • [ ] 数据库字段和 Java 属性是否一致
  • [ ] 是否开启 map-underscore-to-camel-case
  • [ ] 是否用了 resultMap
  • [ ] SQL 字段有没有别名
  • [ ] resultType / resultMap 是否用对
  • [ ] 是否是 MyBatis-Plus 注解误用

如果你愿意,可以把具体 SQL + 实体类 + 映射结果贴出来,我可以直接帮你定位是哪一条原因。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI