# 1.resultMap标签
手动配置mybatis的对象装配表
数据库列 —-> java对象属性 对应关系
“`java
resultType 装配数据时 需要字段 与属性一一对应(包含驼峰)
resultMap (复杂数据结构时 更常用) 如果不指定 功能与resultType一直 自动对应
如果指定了 会根据手动指定的列与属性的对应关系装配数据
“`
resultMap 可以替代 resultType
resultMap 中的标签和属性
“`xml
如果是主键列 一般用id标签对应 propertyjava对象的属性 column 数据库中的列
( javaType实体类数据类型 jdbcType数据库列的数据类型 )
不需要配置
如果是普通列 一般用result对应 propertyjava对象的属性 column 数据库中的列
“`
高级映射 (映射数据与对象的对应关系) 如果列不指定 不能自动对应
通常搭配继承一起使用 体现基础字段的对应
association 对应某个实体对象
Emp对象中 有部门信息 在java中 包含一个Dept对象
“`java
package com.javasm.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
import java.io.Serializable;
/**
* (Emp)实体类
*
* @author makejava
* @since 2024-11-26 09:40:43
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Emp implements Serializable {
private static final long serialVersionUID = -16018027389934188L;
private Integer empno;
private String ename;
private String job;
private Integer mgr;
private String hiredate;
private Double sal;
private Double comm;
//关联部门信息
private Dept dept;
// private Integer deptno;
//
//
// private String dname;
//
// private String loc;
}
“`
映射文件配置
“`xml
“`
通过sql语句 把需要的数据查询出来
“`sql
select * from emp e,dept d where e.deptno = d.deptno
“`
collection 对应集合
每个部门有多个员工 部门对象中 包含Emp的集合
“`sql
select * from emp e,dept d where e.deptno = d.deptno
“`
“`java
每个Dept中都有多个Emp List
“`
映射配置每个部门有多个员工 部门对象中 包含Emp的集合
“`java
package com.javasm.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
/**
* @author gfs
* @version 0.1
* @className Dept
* @descriptioin:
* @date 2024/11/26 10:32
* @since jdk11
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Dept {
private Integer deptno;
private String dname;
private String loc;
//多方的数据集合
private List
}
“`
映射配置
“`xml
“`
sql语句
“`sql
select * from dept d left join emp e on d.deptno = e.deptno
order by d.deptno
“`
# 2.数据库关联查询
表有数据关联时 需要做关联查询
— 连表查询
“`sql
— 简化语法 使用内连接
select * from emp e,dept d where e.deptno = d.deptno
— 标准sql语法 内连接
select * from emp e INNER JOIN dept d on e.deptno = d.deptno
“`
“`sql
— 外连接 left right 哪一方显示全集
select d.*,e.* from emp e right join dept d on e.deptno = d.deptno
order by d.deptno
select * from dept d left join emp e on d.deptno = e.deptno
order by d.deptno
“`
— 如果是内连接 连表顺序无影响
— 如果做外联 连表顺序 有影响
多表关联时 全集方向保持一致
# 3.数据库对应关系 java对象对应关系
 —–> list
“`
一方 关联多方的对象 association配置
emp —–> dept
student —> class(班级)
![Snipaste_2024-11-26_14-48-20](http://43.155.216.63:21080/wp-content/uploads/2025/12/Snipaste_2024-11-26_14-48-20.png
多对多情况下
双方都是对方的集合 collection配置
“`java productInfo –>list java中 对象之间的关系 对象中包含某个其他对象 association 对象中包含集合其他对象 collection # 4.自连接 自连接 需要起别名 通过别名 让mybatis识别哪些是内层 哪些是外层 高级映射标签 association collection 可以多次 和嵌套使用 查省市对应关系数据 “`sql 映射文件 “`xml 查省市县对应关系数据 “`sql from tb_area ta1 inner join tb_area ta2 on ta1.pcode = ta2.code 映射文件 “`xml
order —-> list
“`
总结:
select ta2.*,ta1.code AS subcode ,ta1.name AS subname ,ta1.pcode AS subpcode
from tb_area ta1 inner join tb_area ta2 on ta1.pcode = ta2.code
where ta2.pcode = 0
“`
“`
select ta3.*,ta2.code AS citycode ,ta2.name AS cityname ,ta2.pcode AS citypcode ,
ta1.code AS areacode ,ta1.name AS areaname ,ta1.pcode AS areapcode
inner join tb_area ta3 on ta2.pcode = ta3.code
“`
“`