Mybatis collection 应用

遇到一个业务场景,我有两张表一张员工表(staff) 主键staff_id 另一张叫 (员工部门关系表)staff_department。
因为一个员工(staff)可以属于多个部门(department),一个部门(department)会很多员工(staff),所以staff_department是一个 staff_id 与 department_id的一张多对多的关系表。
现在我需要在mybatis 查询一条staff的时候获得当前这个staff关联的所有department,于是用到collection。

staff 实体类

package com.asclepius.slhdt.serv.dao.domain.staff;

/**
* @author chensg
*
*/

import java.io.Serializable;
import java.util.Date;
import java.util.List;

import org.springframework.format.annotation.DateTimeFormat;

import com.asclepius.slhdt.serv.dao.domain.department.Department;
import com.fasterxml.jackson.annotation.JsonFormat;

public class Staff implements Serializable {

private static final long serialVersionUID = 1L;
// 自动增长id
private Integer staffIncId;
// uuid
private String staffId;
// 姓名
private String staffName;
// 性别
private Integer staffGender;

// 所属部门
private List<Department> departmentList;


public Integer getStaffIncId() {
return staffIncId;
}
public void setStaffIncId(Integer staffIncId) {
this.staffIncId = staffIncId;
}
public String getStaffId() {
return staffId;
}
public void setStaffId(String staffId) {
this.staffId = staffId;
}
public String getStaffName() {
return staffName;
}
public void setStaffName(String staffName) {
this.staffName = staffName;
}
public Integer getStaffGender() {
return staffGender;
}
public void setStaffGender(Integer staffGender) {
this.staffGender = staffGender;
}


public List<Department> getDepartmentList() {
return departmentList;
}
public void setDepartmentList(List<Department> departmentList) {
this.departmentList = departmentList;
}


}



staff与department是一个一对多关系,所以这里定义List<Department>

在xml中

<mapper namespace="com.asclepius.slhdt.serv.dao.mapper.staff.StaffMapper">

<resultMap type="staff" id="staffResult">
<id property="staffIncId" column="staff_inc_id" />
<result property="staffId" column="staff_id" />
<result property="staffName" column="staff_name" />
<result property="staffGender" column="staff_gender" />
<collection property="departmentList" column="staff_id" select="selectDepartment" ofType="department" javaType="ArrayList" />
</resultMap>

<select id="selectDepartment" parameterType="String" resultType="department" resultMap="departmentResult" >
select SD.department_id,
D.department_parent_id,
DP.department_name_alias
from shulan_staff_department SD
left join shulan_department_prop DP on
DP.department_id = SD.department_id
left join shulan_department D on
D.department_id = SD.department_id
where SD.staff_id=#{staffId}
</select>

<resultMap type="department" id="departmentResult">
<id property="departmentIncId" column="department_inc_id" />
<result property="departmentId" column="department_id" />
<result property="departmentParentId" column="department_parent_id" />
<result property="departmentNameAlias" column="department_name_alias" />
</resultMap>
<!-- 查询员工数据 -->
<select id="getStaffById" parameterType="String" resultMap="staffResult">
select S.staff_id,S.staff_name,S.staff_gender,
from staff S
where S.staff_id = #{param1}
</select>


这里省去了很多staff中无关的字段。看collection标签 property="departmentList" 对应的就是实体类中的List<Department> departmentList属性。column与select要连在一起看,select=selectDepartment指的就是 下面id="selectDepartment的select映射SQL,column=staff_id指的就是关联主键的id。调用getstaffById就可以获得当前这个staff以及其关联的所有department
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值