4_多对多关联查询

4_多对多关联查询

根据项目编号查询项目信息,以及参与到该项目之中的所有的员工信息

实体类

  1. @NoArgsConstructor
  2. @AllArgsConstructor
  3. @Data
  4. public class Project implements Serializable {
  5.  private Integer pid;
    
  6.  private String pname;
    
  7.  private Integer money;
    
  8.  // 组合一个ProjectRecord对象集合作为属性
    
  9.  private List<ProjectRecord> projectRecords;
    
  10. }
  11. @Data
  12. @AllArgsConstructor
  13. @NoArgsConstructor
  14. public class ProjectRecord implements Serializable {
  15. private Integer empno;
    
  16. private Integer pid;
    
  17. // 组合一个Emp对象作为属性
    
  18. private Emp emp;
    
  19. }

接口

  1. package com.msb.mapper;
  2. import com.msb.pojo.Emp;
  3. import com.msb.pojo.Project;
  4. /**
    • @Author: Ma HaiYang
    • @Description: MircoMessage:Mark_7001
  5. */
  6. public interface ProjectMapper {
  7.  /**
    
  8.  * 根据项目编号查询一个项目信息及参与该项目的所有员工信息
    
  9.  * @param pid 项目编号
    
  10.  * @return 所有信息封装的Project对象
    
  11.  */
    
  12. Project findProjectJoinEmpsByPid(int pid);
    
  13. }

映射文件

  1.      PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    
  2.      "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    
  3.  <!--Project findProjectJoinEmpsByPid(int pid);-->
    
  4.  <resultMap id="projectJoinEmps" type="project">
    
  5.      <id column="pid" property="pid"></id>
    
  6.      <result column="pname" property="pname"></result>
    
  7.     <result column="money" property="money"></result>
    
  8.     <!--一对多 集合属性 collection-->
    
  9.     <collection property="projectRecords" ofType="projectRecord">
    
  10.         <id column="empno" property="empno"></id>
    
  11.         <id column="pid" property="pid"></id>
    
  12.         <!--一对一 -->
    
  13.         <association property="emp" javaType="emp">
    
  14.             <id property="empno" column="empno"></id>
    
  15.             <result property="ename" column="ename"></result>
    
  16.             <result property="job" column="job"></result>
    
  17.             <result property="sal" column="sal"></result>
    
  18.             <result property="hiredate" column="hiredate"></result>
    
  19.             <result property="mgr" column="mgr"></result>
    
  20.             <result property="comm" column="comm"></result>
    
  21.             <result property="deptno" column="deptno"></result>
    
  22.         </association>
    
  23.     </collection>
    
  24. </resultMap>
    
  25. <select id="findProjectJoinEmpsByPid"  resultMap="projectJoinEmps">
    
  26.     select * from
    
  27.     project p
    
  28.     left join projectrecord pr
    
  29.     on p.pid = pr.pid
    
  30.     left join emp e
    
  31.     on e.empno = pr.empno
    
  32.     where p.pid= #{pid}
    
  33. </select>
    

测试代码

  1. @Test
  2. public void testManyToMany() throws ParseException {
  3.  ProjectMapper mapper = sqlSession.getMapper(ProjectMapper.class);
    
  4.  Project project = mapper.findProjectJoinEmpsByPid(2);
    
  5.  System.out.println(project.getPid());
    
  6.  System.out.println(project.getPname());
    
  7.  System.out.println(project.getMoney());
    
  8.  List<ProjectRecord> projectRecords = project.getProjectRecords();
    
  9.  for (ProjectRecord projectRecord : projectRecords) {
    
  10.     Emp emp = projectRecord.getEmp();
    
  11.     System.out.println(emp);
    
  12. }
    
  13. }

posted @   AidenDong  阅读(64)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
· 零经验选手,Compose 一天开发一款小游戏!
点击右上角即可分享
微信分享提示