一对多:公司对应多个员工,所以,查出来应该是一个公司对象,里面有个属性是多个员工对象,是list还是map之类的,下面公司类和员工类
@Data
public class Com {
public int comId;
public String comName;
public List<Worker> workers;
}
@Data
public class Worker {
public String workerName;
public int WorkerId;
public int comId;
}
处理方式1:collection
公司表和人员表联查是这样的,
select * from fix inner join fix_pic where fix.fix_id =fix_pic.fix_id;
结果是
我们要把这些结果放进一个公司对象中,公司对象中有个list属性,里面依次存放worker信息
所以就要用到collerction
<!-- id 被调用时的名字 type 对应的实体类-->
<resultMap id="querycom" type="com">
<!-- com实体类的属性 ,对应的数据库中的字段名 -->
<result property="comId" column="com_id"></result>
<result property="comName" column="com_name"></result>
<!-- property实体类的属性 ofType内层类-->
<collection property="workers" ofType="worker" javaType="list">
<result property="workerName" column="worker_name"></result>
<result property="workerId" column="worker_id"></result>
</collection>
</resultMap>
<select id="query" resultMap="querycom">
select *
from com
inner join worker
where worker.com_id = com.com_id
</select>
如果只需要学生类的某个属性,那ofType="string"即可。
处理方式2:assosation多表联查
因为是员工表和公司表联查,通过公司id关联,所以我查到一个公司id后,去员工表查这个公司id,并把员工表的查询结果放进公司类的属性中。
<!-- id 被调用时的名字 type 对应的实体类-->
<resultMap id="commap" type="com">
<!-- com实体类的属性 ,对应的数据库中的字段名 -->
<result property="comId" column="com_id"></result>
<result property="comName" column="com_name"></result>
<!-- property com实体类的属性 select第二步要执行的查询语句的id cloumn 给第二步传的值-->
<association property="workers" select="queryworkers" column="com_id"></association>
</resultMap>
<!-- 第一步查询 ,需要mapper调用-->
<select id="qerucom" resultMap="commap">
select *
from com
</select>
<!-- 第二步查询 ,程序自己调用-->
<select id="queryworkers" resultType="worker" parameterType="string">
select * from worker where com_id=#{com_id}
</select>