MyBatis通过自动映射(需开启mapUnderscoreToCamelCase)和显式映射(resultMap或@Results)实现列名与属性名映射;不匹配时须手动指定,SQL别名亦可被自动识别。

MyBatis 处理数据库列名与实体属性名映射,核心靠“自动映射”和“显式映射”两种机制,关键在于列名能否按规则匹配属性名,不匹配时需手动指定。
自动映射:靠命名规则对齐
MyBatis 默认开启 autoMappingBehavior=PARTIAL(只映射无 @Results 或 <resultMap> 的语句),并支持下划线转驼峰(如 user_name → userName)。前提是:
- 数据库列名使用下划线分隔(
create_time) - 实体属性用标准驼峰命名(
createTime) - 全局开启驼峰转换:必须在 MyBatis 配置中设置:
<setting name="mapUnderscoreToCamelCase" value="true"/>
显式映射:用 <resultMap> 精确控制
当列名与属性名完全不遵循规则(比如列是 u_name,属性是 username),或需要处理复杂类型、嵌套查询时,必须定义 <resultMap>:
<resultMap id="UserMap" type="User">
<id property="id" column="u_id"/>
<result property="username" column="u_name"/>
<result property="email" column="u_email"/>
</resultMap>
<select id="selectUser" resultMap="UserMap">
SELECT u_id, u_name, u_email FROM user WHERE id = #{id}
</select>
注解方式:适合简单场景
在 Mapper 接口方法上用 @Results + @Result 替代 XML 映射:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
立即学习“Java免费学习笔记(深入)”;
@Select("SELECT u_id, u_name FROM user WHERE id = #{id}")
@Results({
@Result(property = "id", column = "u_id"),
@Result(property = "username", column = "u_name")
})
User selectUser(@Param("id") Long id);
注意:字段别名(AS)在 SQL 中依然有效,例如 SELECT u_name AS username 可直接被自动映射识别,无需额外配置。
特殊情况处理
以下情况需特别注意:
-
大小写敏感列名(如 PostgreSQL):确保 JDBC URL 加
currentSchema或使用双引号,或统一用小写别名 -
复合主键/联合字段:用
<constructor>或多个<id>/<result>映射到对象属性或构造器 -
空值列不映射:默认跳过 null 列;若需强制设为 null,加
columnPrefix或用@Options(useCache = false)配合逻辑判断

















