sql语句的自定义映射规则(一对多,多对一)

本文详细介绍了在MyBatis中如何自定义映射规则,以处理表与表的一对多和多对一关联查询。通过示例展示了在Department和Employee实体类中如何配置,以及在mapper.xml中编写相应的SQL语句,确保查询结果正确映射到对应的实体对象。内容包括多对一查询中部门经理和上级部门的关联,以及一对多查询的处理方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

表与表 一对多或者多对一 关联查询时 默认的映射规则不满足,就自定义映射规则。
规律:外键在哪儿,多方就在哪儿。
表t_department
在这里插入图片描述 表t_employee
在这里插入图片描述两个表的关联 t_department.manager_id = t_employee.id

1.多对一例子:
准备2个表的domain

 /**
 * 部门实体对象
 */
@Data
public class Department {
    private Long id;
    //部门编号
    private String sn;
    //部门名称
    private String name;
    //部门状态  0删除,1正常
    private Integer state;
    //部门经理    t_department.manager_id = t_employee.id
    private Employee manager;
    //上级部门    t_department d   t_department p  d.parent_id = p.id
    private Department parent;
}

/**
 * 部门经理实体对象
 */
@Data
public class Employee {
	private Long id;
  	private String username;
}

准备*mapper.xml中的sql语句

<!-- 
自定义映射规则:多对一      根据domain来写
多个部门对应一个上级部门
多个部门对应一个部门经理
-->
<resultMap id="deptLoadEmp"  type="Department"><!--type: 主表对应domain的类型-->
	<id column="id"  property="id" />
	<result column="sn"  property="sn" />
	<result column="name"  property="name" />
	<result column="state"  property="state" />
	<!--
	domain中关联其他表的属性
	property:对应domain中的 属性
	javatype:对应domain中属性的 类型
	 -->
	<association property="manager" javatype="Employee">
		<id column="eid" property="id"/>
  		<result column="eusername" property="username"/>
	</association>
	<association property="parent" javatype="Department">
		<id column="pid" property="id"/>
  		<result column="pname" property="name"/>
	</association>
</resultMap>

<select id="loadAllDepartments" resultMap="deptLoadEmp" >
select d.*,e.id eid,e.username eusername,p.id pid,p.name pname from t_department d 
left join t_employee e on d.manager_id=e.id 
left join t_department p on d.parent_id=p.id
</select>

2.一对多的例子
准备2张表
t_employee

<cltoin… ofType>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值