通过collection集合(包含association标签)来解决一对多的映射关系
作者:互联网
通过collection集合来解决一对多的映射关系
一对多:一个部门对应多个员工
多对一:多个员工对应一个部门
一对多的解决方法:
在部门(少的)的实体类中设置一个员工集合属性(多的)
private List<Emp> emps;
public List<Emp> getEmps() {
return emps;
}
public void setEmps(List<Emp> emps) {
this.emps = emps;
}
连表查询时:
<select id="getDeptAndEmp" resultMap="resultMapId">
select * from dept left join emp on dept.did = emp.did;
</select>
<resultMap id="resultMapId" type="com.simple.simple1.Dept">
<id property="did" column="did"></id>
<result property="dname" column="dname"></result>
<collection property="emps" ofType="Emp">
<id property="eid" column="eid"></id>
<result property="ename" column="ename"></result>
<result property="password" column="password"></result>
<result property="age" column="age"></result>
<result property="sex" column="sex"></result>
<result property="email" column="email"></result>
</collection>
</resultMap>
连表查询的时候,会查询到多条emp的具体记录,但是无法与dept实体类中的集合属性进行映射,所以使用的resultMap中的collection标签,来将集合中的emp实体类的属性与查询到的emp记录的字段名建立映射关系
分步查询时:
第一步:
查询指定dept记录,此时emp集合与没有映射关系,所以使用resultMap来进行分步查询,为emp集合赋值
<select id="getDeptAndEmp" resultMap="resultMapId">
select * from dept left join emp on dept.did = emp.did;
</select>
<resultMap id="resultMapId" type="com.simple.simple1.Dept">
<id property="did" column="did"></id>
<result property="dname" column="dname"></result>
</resultMap>
第二步:
dept中其余属性与字段名建立了映射,根据唯一标识,调用sql,传入外键(或者关联的键)去执行查找,并返回一个emp的集合
<association property="emps" select="com.simple.simple1.pojo.mapper.UserMapper.getEmpByDid" column="did">
<result property="ename" column="username"></result>
<result property="password" column="password"></result>
<result property="age" column="age"></result>
<result property="sex" column="sex"></result>
<result property="email" column="email"></result>
</association>
column="did" 外键(或者说是两个表相关联的键)
最后将集合里的实体类的属性名和查询出来的字段名建立映射关系即可
标签:映射,collection,查询,dept,emp,集合,association,emps 来源: https://www.cnblogs.com/new228666/p/16418089.html