mybatis一对多映射处理

一对多:公司对应多个员工,所以,查出来应该是一个公司对象,里面有个属性是多个员工对象,是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>

猜你喜欢

转载自blog.csdn.net/sharesb/article/details/127932028