Mybatis多表查询,从“学”到“不会”
Mybatis多表查询总结
1多表查询的主要实现方式
join查询
<select id="#" resultMap="#"> select <include refid="#" /> from # left join # on # = # </select>
核心特点:
- 使用join语句可以一次性从多张表中获取数据
- 通过resultMap中的association标签将结果映射到对象的关联属性中
- 只执行一次sql查询
2ResultMap
2.1association标签
<association property="#" javaType="#.domain.Department"> <id column="#" property="#" /> <result column="#" property="#" /> <result column="#" property="#" /> </association>
配置要点
- properity:实体类中的属性名
- javaType:关联属性的类名
- 内部的id和result标签配置关联表字段与实体属性的映射
3避免列名冲突的方法
3.1使用表别名
例如
select e.empno, e.ename, e.deptno, d.deptno as d_deptno, d.dname, d.loc
from emp e left join dept d on e.deptno = d.deptno
3.2使用列别名例如
deptno as dno
3在ResultMap中明确指定列与属性的映射关系
<result column="deptno" property="deptno" /> <id column="d_deptno" property="deptNo" />
4SQL片段的使用
通过
5常见错误及解决方案
5.1列名错误
错误:
java.sql.SQLIntegrityConstraintViolationException: Column 'deptno' in field list is ambiguous
原因:多个表中存在相同名称的列,且在SQL中未明确指定表来源 解决方案:为所有列添加表别名,如e.deptno和d.deptno
5.2XML语法错误
错误:元素类型'mapper'必须由匹配的结束标记''终止
原因:XML标签未正确闭合或嵌套错误 解决方案:检查XML语法,确保所有标签都正确闭合,嵌套关系正确

浙公网安备 33010602011771号