优先选resultType,当列名与属性名能自动匹配(如启用驼峰转换)或返回基本类型、Map时;不匹配或需关联查询、延迟加载等高级功能时必须用resultMap。

选 resultType 还是 resultMap,关键看查询结果能不能“自动对得上号”——也就是数据库列名和 Java 对象属性名是否能被 MyBatis 顺利匹配。
列名和属性名一致或能自动转换,用 resultType
当表字段是 user_name、create_time,而 Java 类属性是 userName、createTime,只要在配置中启用了驼峰转换(map-underscore-to-camel-case: true),MyBatis 就能自动完成映射。此时直接写:
<select id="list" resultType="com.example.User">SELECT * FROM user</select>- 返回基本类型(如
int、String)也必须用resultType - 返回
Map或List<Map>同样适用,比如resultType="map"
列名和属性名不匹配,必须用 resultMap
比如数据库字段叫 usr_nme、age_yr,Java 属性却是 username、age——这种明显对不上,自动映射会失败。这时要显式定义映射关系:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 先写一个
<resultMap id="userMap" type="User"> - 用
<id column="usr_nme" property="username"/>和<result column="age_yr" property="age"/>逐个绑定 - 查询语句里引用:
resultMap="userMap"
涉及关联查询(一对一、一对多),只能用 resultMap
单表查用户可以靠 resultType,但要同时查出用户 + 所属部门 + 下属列表,就必须用 resultMap 来组织嵌套结构:
立即学习“Java免费学习笔记(深入)”;
- 用
<association>映射部门对象(一对一) - 用
<collection>映射下属集合(一对多) - 支持延迟加载、自定义类型处理器、嵌套结果分步查询等高级能力
不确定时,优先试 resultType;失败再切 resultMap
开发中建议从简单入手:
- 写完 SQL 和 POJO 后,先配
resultType运行一次 - 如果日志报
There is no getter for property named 'xxx' in class xxx,说明字段没映射上 - 这时再补
resultMap,明确指定列与属性的对应,问题立解

















