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片段的使用

通过标签引用SQL片段:select

5常见错误及解决方案

5.1列名错误

错误:
java.sql.SQLIntegrityConstraintViolationException: Column 'deptno' in field list is ambiguous
原因:多个表中存在相同名称的列,且在SQL中未明确指定表来源 解决方案:为所有列添加表别名,如e.deptno和d.deptno
5.2XML语法错误
错误:元素类型'mapper'必须由匹配的结束标记''终止
原因:XML标签未正确闭合或嵌套错误 解决方案:检查XML语法,确保所有标签都正确闭合,嵌套关系正确

posted @ 2026-01-28 18:41  瑞瑞子  阅读(1)  评论(0)    收藏  举报