mybatis一对一关联用association配置,需明确property和javatype,推荐嵌套结果(join+子resultmap),慎用嵌套查询(select+fetchtype="lazy"),复用独立resultmap,注意column与sql别名严格对齐。

MyBatis 中一对一关联用 association 配置,核心是把主对象和它唯一关联的另一个对象自动组装起来。关键不在“能不能配”,而在“怎么配才不漏字段、不乱映射、不拖慢查询”。
明确 property 和 javaType 是前提
主实体类中必须声明一个引用类型属性(比如 User user),association 的 property 就填这个属性名;javaType 必须写全限定类名(如 com.example.User)或别名(需在 MyBatis 配置中注册)。漏写或写错会导致空指针或映射失败。
-
property="user"对应 Order 类里的private User user; -
javaType="User"要确保 MyBatis 能识别该类型(推荐用别名,避免长包名出错) - 若关联对象本身也有嵌套结构(如 User 包含 Profile),可继续在它的
resultMap里嵌套association
两种加载方式:优先选嵌套结果(JOIN),慎用嵌套查询(SELECT)
配置时通过写法区分——不用额外加标签,看 association 里有没有 select 属性。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 嵌套结果(推荐):SQL 用
LEFT JOIN一次性查出所有字段,在association内直接写子resultMap映射。字段别名要清晰(如u.id AS user_id),避免列名冲突 - 嵌套查询(按需):用
select="selectUserById"引用另一个查询语句,适合需要延迟加载的场景;必须配合fetchType="lazy",否则默认 eager 会立刻触发 N+1 查询 - 不加
select属性 + 有内嵌resultMap→ 嵌套结果;有select属性 → 嵌套查询
复用 resultMap 提升可维护性
别把所有字段都堆在主 resultMap 里。把关联对象的映射逻辑单独抽成一个 resultMap,再通过 resultMap 属性引用它。
- 定义独立的
<resultmap id="userMap" type="User">…</resultmap> - 主映射中写:
<association property="user" javatype="User" resultmap="userMap"></association> - 这样 User 映射可在订单、评论、日志等多个地方复用,改一处,处处生效
注意 column 前缀与字段别名对齐
JOIN 查询时,多表字段同名(比如两个表都有 id)必须用别名区分,且 column 值要和 SQL 中的别名完全一致。
- SQL 中写:
u.id AS user_id, u.name AS user_name, a.id AS addr_id - 映射中对应:
<id property="id" column="user_id"></id>、<result property="id" column="addr_id"></result> - 也可用
columnPrefix="user_"统一加前缀,但要求 SQL 字段也带该前缀(如user_id,user_name),否则匹配不到
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










