MyBatis笔记——一对多参映射问题解决

2024-04-27 19:36

本文主要是介绍MyBatis笔记——一对多参映射问题解决,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

场景重现


当想要查询一个部门下的所有员工时,一个部门 对应 多个员工

实验使用的类和对象

mapper.xml

<select id="getEmpAndDept" resultMap="empAndDeptResultMapTwo">  select * from t_emp left join t_dept on t_emp.did = t_dept.did    where t_emp.eid = #{eid}
</select>

pojo:

@Data  
@AllArgsConstructor  
@NoArgsConstructor  
public class Emp {  private Integer eid;  private String empName;  private Integer age;  private String sex;  private String email;  private Dept dept;  
}
@Data  
@AllArgsConstructor  
@NoArgsConstructor  
public class Dept {  private Integer did;  private String deptName;  
}

使用 <collection> 解决


1. 在原有的pojo中加入员工集合

@Data  
@AllArgsConstructor  
@NoArgsConstructor  
public class Dept {  private Integer did;  private String deptName;  private List<Emp> emps;  
}

2. 在mapper的映射文件中创建 <resultMap>,并为员工集合定义标签<collection>

<resultMap id="deptAndEmpResultMap" type="Dept">  <id property="did" column="did"/>  <result column="dept_name" property="deptName"/>  <collection property="emps" ofType="emp">  <id property="eid" column="eid"/>  <result property="empName" column="emp_name"/>  <result property="age" column="age"/>  <result property="sex" column="sex"/>  <result property="email" column="email"/>  </collection>  
</resultMap>

3. 在映射文件中引入这个 <resultMap>

<select id="getDeptAndEmp" resultMap="deptAndEmpResultMap">  select * from t_dept left join t_emp on t_dept.did = t_emp.did where t_dept.did = #{did}  
</select>

使用分布查询


1. 和之前一样在原有的pojo中加入员工集合

@Data  
@AllArgsConstructor  
@NoArgsConstructor  
public class Dept {  private Integer did;  private String deptName;  private List<Emp> emps;  
}

2. 在mapper的映射文件中创建 <resultMap>,并使用<collection> 的select查询对应部门员工表

<resultMap id="deptAndEmpResultMap" type="Dept">  <id property="did" column="did"/>  <result column="dept_name" property="deptName"/>  <collection property="emps" select="com.zxb.mybatis.mapper.EmpMapper.getDeptAndEmpByStepTwo" column="did">  <id property="eid" column="eid"/>  <result property="empName" column="emp_name"/>  <result property="age" column="age"/>  <result property="sex" column="sex"/>  <result property="email" column="email"/>  </collection>
</resultMap>

3. emp创建对应的查询

<select id="getDeptAndEmpByStepTwo" resultType="Emp">  select * from t_emp where did = #{did}  
</select>

这篇关于MyBatis笔记——一对多参映射问题解决的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/941352

相关文章

springboot3.x使用@NacosValue无法获取配置信息的解决过程

《springboot3.x使用@NacosValue无法获取配置信息的解决过程》在SpringBoot3.x中升级Nacos依赖后,使用@NacosValue无法动态获取配置,通过引入SpringC... 目录一、python问题描述二、解决方案总结一、问题描述springboot从2android.x

Mybatis的mapper文件中#和$的区别示例解析

《Mybatis的mapper文件中#和$的区别示例解析》MyBatis的mapper文件中,#{}和${}是两种参数占位符,核心差异在于参数解析方式、SQL注入风险、适用场景,以下从底层原理、使用场... 目录MyBATis 中 mapper 文件里 #{} 与 ${} 的核心区别一、核心区别对比表二、底

MyBatis-Plus逻辑删除实现过程

《MyBatis-Plus逻辑删除实现过程》本文介绍了MyBatis-Plus如何实现逻辑删除功能,包括自动填充字段、配置与实现步骤、常见应用场景,并展示了如何使用remove方法进行逻辑删除,逻辑删... 目录1. 逻辑删除的必要性编程1.1 逻辑删除的定义1.2 逻辑删php除的优点1.3 适用场景2.

Springboot3统一返回类设计全过程(从问题到实现)

《Springboot3统一返回类设计全过程(从问题到实现)》文章介绍了如何在SpringBoot3中设计一个统一返回类,以实现前后端接口返回格式的一致性,该类包含状态码、描述信息、业务数据和时间戳,... 目录Spring Boot 3 统一返回类设计:从问题到实现一、核心需求:统一返回类要解决什么问题?

解决idea启动项目报错java: OutOfMemoryError: insufficient memory

《解决idea启动项目报错java:OutOfMemoryError:insufficientmemory》:本文主要介绍解决idea启动项目报错java:OutOfMemoryError... 目录原因:解决:总结 原因:在Java中遇到OutOfMemoryError: insufficient me

maven异常Invalid bound statement(not found)的问题解决

《maven异常Invalidboundstatement(notfound)的问题解决》本文详细介绍了Maven项目中常见的Invalidboundstatement异常及其解决方案,文中通过... 目录Maven异常:Invalid bound statement (not found) 详解问题描述可

MyBatis配置文件中最常用的设置

《MyBatis配置文件中最常用的设置》文章主要介绍了MyBatis配置的优化方法,包括引用外部的properties配置文件、配置外置以实现环境解耦、配置文件中最常用的6个核心设置以及三种常用的Ma... 目录MyBATis配置优化mybatis的配置中引用外部的propertis配置文件⚠️ 注意事项X

MyBatis中的两种参数传递类型详解(示例代码)

《MyBatis中的两种参数传递类型详解(示例代码)》文章介绍了MyBatis中传递多个参数的两种方式,使用Map和使用@Param注解或封装POJO,Map方式适用于动态、不固定的参数,但可读性和安... 目录✅ android方式一:使用Map<String, Object>✅ 方式二:使用@Param

idea粘贴空格时显示NBSP的问题及解决方案

《idea粘贴空格时显示NBSP的问题及解决方案》在IDEA中粘贴代码时出现大量空格占位符NBSP,可以通过取消勾选AdvancedSettings中的相应选项来解决... 目录1、背景介绍2、解决办法3、处理完成总结1、背景介绍python在idehttp://www.chinasem.cna粘贴代码,出

MyBatis-Plus使用动态表名分表查询的实现

《MyBatis-Plus使用动态表名分表查询的实现》本文主要介绍了MyBatis-Plus使用动态表名分表查询,主要是动态修改表名的几种常见场景,文中通过示例代码介绍的非常详细,对大家的学习或者工作... 目录1. 引入依赖2. myBATis-plus配置3. TenantContext 类:租户上下文