首页 > 其他分享 >4_多对多关联查询

4_多对多关联查询

时间:2023-07-30 23:23:47浏览次数:30  
标签:Project mapper pid private 关联 project emp 查询

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. }

标签:Project,mapper,pid,private,关联,project,emp,查询
From: https://www.cnblogs.com/01way/p/17592329.html

相关文章

  • git:按照标签查询提交记录log日志
    gitlog可以查询提交历史,增加一些参数就可以对提交记录log日志进行过滤#查询标签`v1.0.0`之前提交的历史记录gitlogv1.0.0--pretty=format:"%s"#查询标签`v1.0.0`之后提交的历史记录gitlogv1.0.0..--pretty=format:"%s"--pretty=format:"%s"表示显示提交说明参考文章......
  • mysql 简单进阶 ———— 重构查询[二]
    前言简单整理一下重构查询。正文为什么我们需要重构查询,原因也很简单,那就是查询慢。为什么会查询慢?查询性能慢底下的最基本的原因是访问的数据太多。某些查询不可避免地需要筛选大量的数据,但这并不常见。大部分性能低下的查询都可以通过减少访问的数据流的方式进行优化。......
  • mybatis用注解如何实现模糊查询
    在MyBatis中使用注解实现模糊查询非常简单,只需要在相应的SQL语句中使用like关键字即可。以下是实现模糊查询的示例代码:@Select("SELECT*FROMusersWHEREnameLIKE'%${keyword}%'")List<User>findUsersByName(@Param("keyword")Stringkeyword);上述代码用@Selec......
  • 十九、消息查询
    RocketMQ支持按照下面两种维度(“按照MessageId查询消息”、“按照MessageKey查询消息”)进行消息查询。在RocketMQdashboard中:点击消息,可以选择MessageId和MessageKey查询。按照MessageId查询消息RocketMQ中的MessageId的长度总共有16字节,其中包含了消息存储主机地址(IP地......
  • MySQL慢查询解析
    文档课题:MySQL慢查询解析.数据库:mysql5.7.211、建测试表1.1、建表结构.mysql>usebooksDB;ReadingtableinformationforcompletionoftableandcolumnnamesYoucanturnoffthisfeaturetogetaquickerstartupwith-ADatabasechangedCREATETABLE`t_user......
  • 进程掏空代码注入实现和使用威胁图的检测思路——本质上掏空就是在操作PE的加载,NtUnma
     在进程掏空代码注入技术中,攻击者创建一个处于挂起状态的新进程,然后从内存中取消映射其映像,改为写入恶意二进制文件,最后恢复程序状态以执行注入的代码。 注入步骤:步骤1:创建一个处于挂起状态的新进程:设置了CREATE_SUSPENDED标志的CreateProcessA()步骤2:交换其内存内容(取......
  • 用于查找 SQL Server 中死锁的 T-SQL 查询
    用于查找SQLServer中死锁的T-SQL查询 早些时候,我写了一篇关于使用扩展事件来查找SQLServer上发生的死锁的文章。扩展事件对于跟踪服务器上短时间内发生的死锁有很大帮助,尤其是在生产环境中。然而,在开发环境中,我遇到过当多个开发人员尝试对表执行dml语句时出现持续长......
  • Java面试题 P13:MySql中,如何定位慢查询
    如何定位慢查询?1、首先介绍一下当时产生问题的场景,具体什么情况慢2、在mysql中开启慢查询日志,设定查询时间超过2秒的都记录到日志中,我们逐步筛查出现慢sql的原因慢查询可能产生的原因:(1)聚合查询(2)多表查询(3)表数据量过大查询(4)深度分页查询 mysql开启慢查询日志配置:(1)打开My......
  • 动态构建IN查询数据格式的Oracle SQL实现方法
    背景在实际的数据库查询中,经常会遇到根据不同条件动态构建IN查询的需求。例如,当选择一个部门时,需要查询指定部门的数据;当选择多个部门时,需要查询多个部门的数据。在OracleSQL中,我们不能直接在一条SQL查询中动态构建IN查询的数据格式。然而,使用CASEWHEN语句,我们可以巧妙地解决这个......
  • Mybatis之动态查询:choose、when和otherwise标签使用
    【使用场景】有的时候,我们需要根据不同的选择,关联不同的表,这个时候<choose/><when/>和<otherwise>标签就发挥作用了。比如说,内部用户和外部用户表是分开的,在查询用户的时候,我们就需要根据角色类型去选择不同的关系表进行关联。SELECT*FROMrolerLEFTJOIN<!--当角色分类......