MyBatis 默认不自动映射下划线字段与驼峰属性,但可通过四种方式实现:1. 开启全局 mapUnderscoreToCamelCase;2. 使用 @Results 注解手动映射;3. SQL 中用 AS 别名对齐属性名;4. 自定义 TypeHandler 处理特殊逻辑。

MyBatis 本身不自动处理数据库字段(下划线命名,如 user_name)与 Java 实体类属性(驼峰命名,如 userName)之间的映射,但提供了多种可靠方式来实现这种转换。关键是开启或配置「自动映射」机制,而不是依赖手动写 <resultMap> 一一映射。
开启全局驼峰转下划线映射(推荐)
这是最常用、最省事的方式:在 MyBatis 全局配置(mybatis-config.xml 或 Spring Boot 的 application.yml)中启用 mapUnderscoreToCamelCase。
- XML 配置(
mybatis-config.xml):
<settings>
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
</configuration>
- Spring Boot(
application.yml):
configuration:
map-underscore-to-camel-case: true
开启后,MyBatis 查询结果会自动将 user_name → userName、create_time → createTime 等字段映射到对应驼峰属性,无需额外配置。
使用 @Results + @Result 注解手动指定映射
适用于个别字段不遵循常规规则,或需要精细控制(比如字段类型转换、复杂嵌套)的场景。
立即学习“Java免费学习笔记(深入)”;
- 在 Mapper 接口方法上用
@Select配合@Results:
@Results({
@Result(property = "userId", column = "user_id"),
@Result(property = "userName", column = "user_name")
})
User selectById(Long id);
注意:property 是实体类属性名(驼峰),column 是数据库字段名(下划线),二者显式绑定。
SQL 中用 AS 别名直接对齐属性名
简单直接,适合动态 SQL 少、字段不多的查询。
- Mapper XML 示例:
SELECT user_id AS userId,
user_name AS userName,
create_time AS createTime
FROM user
WHERE id = #{id}
</select>
只要别名和实体属性名完全一致(大小写敏感),MyBatis 就能通过反射自动赋值,无需开启驼峰配置或写 resultMap。
自定义 TypeHandler 处理特殊映射逻辑
极少数情况下,比如字段命名混乱(USER_NAME、user_name、username 混用),或需统一做前缀/后缀截取,可实现 TypeHandler 并注册为默认处理器。但日常开发中几乎不需要——优先用前面三种方式即可。


















