当前位置: 首页 > news >正文

[mybatis]resultMap详解

resultMap

    Mybatis中提供了resultMap功能,可以将数据库查询结果映射到Java对象,用于解决 字段名与属性名不一致复杂关系(如一对多)的映射问题。 

比如一个User类,在它的属性里还有另一个子对象(或者多个),可以是个List或者其他实体类,这个时候就需要用到

    格式:

<resultMap type="User" id="userOrderMap">

type:要映射的实体类;id:给该resultMap定义一个唯一标识符。

id、result标签:用于映射指定的属性(不包含除String外的实体类对象),这两者的在映射上没有太多不同。id可以用于标识对象的主键字段,提升性能(MyBatis用主键判断对象是否重复)。

<resultMap id="" type="">
    <id column="" property=""></id>
    <result column="" property=""></id>
</resultMap>

column:对应表的列名

property:java对象的属性名

collection标签:用于映射一对多的子对象,比如将多条数据映射到某个集合中(集合的元素类型是某种实体类)。如果有点晕,就记得:给集合、map等类型的属性赋值,使用collection

<!-- 给list的属性赋值-->
<collection property="" ofType="">
    <id column="" property=""></id>
    <result column="" property=""></id>
</collection>

<!-- 给map属性赋值-->
<collection 
    property=""           
    javaType="java.util.HashMap"  <!-- 固定为某个Map,此处写的是HashMap -->
    ofType=""         
    keyColumn=""           <!-- 指定作为Map键的列 -->
    keyProperty=""              <!-- 键值对中,值对象中作为键的属性 -->
>


    <id column="" property=""/>
    <result column="" property=""/>
</collection>

property:父对象中对应的子对象

ofType:子对象对应的数据类型,比如该子对象的数据类型是User类,那么此处就填写User。如果是给Map元素赋值,那么该属性的功能是指定 value 的数据类型

keyColumn:在映射Map类型数据时,用于指定key 的数据类型

给Map映射的内容,光描述比较抽象难懂,下面是个示例:

public class Order {
    private Long id;
    private String orderNumber;
    private Map<Long, OrderItem> itemMap; // 键为商品ID,值为OrderItem对象
    
    // Getters & Setters
}

public class OrderItem {
    private Long id;        // 与keyProperty="id"对应
    private String name;
    private Integer quantity;
    
    // Getters & Setters
}

//映射后的数据结构

order.getItemMap() = {
    1001: OrderItem(id=1001, name="商品A", quantity=2),
    1002: OrderItem(id=1002, name="商品B", quantity=5)
}

 <association>标签

    与使用collection标签映射List用法一致,只是将collection改成association即可。区别在于,collection是给集合中多个元素的属性进行赋值,association是给父对象的某一个子对象元素中的属性进行赋值。

示例:

<association property="user" javaType="User">
  <id column="id" property="id"/>             
  <result column="username" property="name"/>   
  <result column="sex" property="sex"/>        
  <!-- 其他字段映射... -->
</association>

                                                           

相关文章:

  • SpringBoot 核心原理深度解析
  • Python学习第八天
  • 如何在Android中实现自定义视图
  • Vue 监听器的魔法之旅:@Watch(‘form.productId’) vs @Watch(‘value’) 大揭秘!✨
  • 大白话面试前的准备工作
  • Python +Anaconda,DeepSeeK API入门小例子
  • 智能决策新时代:大模型驱动的数据洞察与自动化报告生成
  • Spring Boot 常用注解全解析:从核心到进阶的实践指南
  • 10x Research:Secured Finance 基于 FIL 的美元稳定币如何推动 Filecoin 生态系统发展
  • elk的相关的基础
  • 真实项目中使用到的ES自定义评分脚本
  • GaussDB性能诊断核心武器:EXPLAIN ANALYZE 与执行计划
  • Git 使用教程
  • 敏捷开发之分支管理策略
  • Docker 学习(二)——基于Registry、Harbor搭建私有仓库
  • go数组的声明和初始化
  • Mysql命令大全(创建数据库显示数据库删除数据库)
  • PHP配置虚拟主机
  • 我们来学nginx -- 优化下游响应速度
  • Vue3 Suspense 终极指南:原理、用法与替代方案
  • 马上评丨学术不容“近亲繁殖”
  • 马上评丨全民定制公交,打开城市出行想象空间
  • 面对非专业人士,科学家该如何提供建议
  • 习近平会见塞尔维亚总统武契奇
  • 复旦发文缅怀文科杰出教授裘锡圭:曾提出治学需具备三种精神
  • 一热就出汗 VS 热死都不出汗的人,哪个更健康?