一、关联查询基础
1. 连接类型与选择
SELECT u. * , r. role_name
FROM User u
LEFT JOIN user_role ur ON u. id = ur. uid
LEFT JOIN Role r ON ur. rid = r. id;
- **规则**:以左表为主,保留左表所有记录,右表无匹配时填充`NULL`。
- **场景**:查询主体数据,允许关联数据缺失。
SELECT e. * , d. name
FROM Emp e
RIGHT JOIN Dept d ON e. dept_id = d. id;
- **规则**:以右表为主,保留右表所有记录,左表无匹配时填充`NULL`。
- **场景**:强制包含副表数据,即使主表无关联记录。
INNER JOIN(内连接) 规则 :仅返回两表匹配的记录。场景 :严格关联数据,过滤不匹配的记录。
二、别名的核心作用与使用规范
1. 为什么需要别名?
解决列名冲突 :多表联查时,不同表的同名字段(如id
、name
)需通过别名区分。明确字段来源 :通过别名标识字段所属表(如e.id AS eid
表示员工表的id
)。
2. 别名设置规范
表别名 :简短且一致(如User u
、Role r
)。列别名 :格式为表别名_列名
(如e.id AS eid
)。SQL 示例 :
SELECT u. id AS uid, r. id AS rid, r. name AS rname
FROM User u
LEFT JOIN user_role ur ON u. id = ur. uid
LEFT JOIN Role r ON ur. rid = r. id;
三、ResultMap 映射详解
1. <association>
:一对一/多对一映射
用途 :映射单个嵌套对象(如员工属于一个部门)。关键属性 : property
:对象属性名(如Emp.dept
)。javaType
:关联对象的全限定类名(如cn.cjxy.domain.Dept
)。 示例 :
< resultMap id = " empResultMap" type