[mybatis]resultMap详解

news2025/3/10 7:52:46

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>

                                                           

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2312571.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

DEV C++安装

点击----我接受 点击--下一步 选择安装路径&#xff1a; D盘安装选择路径&#xff1a; 点击----安装等待安装完成点击---完成即可 一路下一步即可

ESP32驱动OV3660摄像头实现物体轮廓识别(摄像头支持红外夜视、边缘AI计算)

目录 1、传感器特性 2、硬件原理图 3、驱动程序 ESP32-S3 AI智能摄像头模块是一款专为智能家居和物联网应用打造的高性能边缘AI开发模组。它集成了摄像头、麦克风、音频功放、环境光传感器和夜视补光灯,无需依赖云端即可实现本地化AI推理。 凭借TensorFlow Lite、YOLO和O…

深入探讨 Docker 层次结构及其备份策略20250309

深入探讨 Docker 层次结构及其备份策略 本文将深入探讨 Docker 层次结构 以及在 不同场景下应选择哪种备份方式。通过本文的介绍&#xff0c;您将对如何高效地管理和迁移 Docker 容器有更深的理解。 &#x1f4cc; 什么是 Docker 层次结构&#xff1f; Docker 镜像采用了 分…

游戏引擎学习第145天

仓库:https://gitee.com/mrxiao_com/2d_game_3 今天的计划 目前&#xff0c;我们正在完成遗留的工作。当时我们已经将声音混合器&#xff08;sound mixer&#xff09;集成到了 SIMD 中&#xff0c;但由于一个小插曲&#xff0c;没有及时完成循环内部的部分。这个小插曲主要是…

如何在el-input搜索框组件的最后面,添加图标按钮?

1、问题描述 2、解决步骤 在el-input组件标签内&#xff0c;添加一个element-plus的自定义插槽&#xff0c; 在插槽里放一个图标按钮即可。 3、效果展示 结语 以上就是在搜索框组件的末尾添加搜索按钮的过程。 喜欢本篇文章的话&#xff0c;请关注本博主~~

NoteGen是一款开源跨平台的 AI 笔记应用,专注于 recording 和 writing ,基于 Tauri 开发

一、软件介绍 文末提供程序和源码下载 NoteGen 是一款专注于记录和写作的跨平台 AI 笔记应用&#xff0c;基于 Tauri 开发。NoteGen 的核心理念是将记录、写作和 AI 结合使用&#xff0c;三者相辅相成。记录功能可以帮助用户快速捕捉和整理碎片化知识。整理功能是连接记录和写…

第五次CCF-CSP认证(含C++源码)

第五次CCF-CSP认证 第一道&#xff08;easy&#xff09;思路及AC代码 第二道&#xff08;easy&#xff09;思路及AC代码solution 1solution 2 第三道&#xff08;mid&#xff09;思路及AC代码&#xff08;mid&#xff09; 第一道&#xff08;easy&#xff09; 题目链接 思路及…

个人学习编程(3-06) 搜索

树的高度&#xff1a; 题目&#xff1a; PS G:\vscodetest> .\ab.exe 5 5 1 2 1 4 1 5 2 3 3 #include <stdio.h> #include <vector> #include <queue> using namespace std; int main() {int n,m;scanf("%d %d",&n,&m);vector<vec…

springcloud sentinel教程

‌QPS&#xff08;Queries Per Second&#xff09;即每秒查询率 TPS&#xff0c;每秒处理的事务数目 PV&#xff08;page view&#xff09;即页面浏览量 UV 访问数&#xff08;Unique Visitor&#xff09;指独立访客访问数 一、初识Sentinel 什么是雪崩问题? 微服务之间相…

从零开始用react + tailwindcss + express + mongodb实现一个聊天程序(十一) 实现服务端和客户端socketio 连接

1.后端部分 socketIO文档参考Socket.IO 首先在lib下新建socket.js文件 参考服务器API | Socket.IO import {Server} from socket.io; import http from http import express from "express"const app express() const server http.createServer(app) const io …

【GoTeams】-3:构建api、重构错误码

本文目录 1. 构建api梳理调用关系api包的作用路由梳理注册Register代码语法 2. 重构错误码 1. 构建api 首先复制project-user&#xff0c;改名为project-api&#xff0c;放在总的路径下&#xff0c;然后在工作区中进行导入。 运行命令go work use .\project-api\新建工作区之…

《苍穹外卖》SpringBoot后端开发项目重点知识整理(DAY1 to DAY3)

目录 一、在本地部署并启动Nginx服务1. 解压Nginx压缩包2. 启动Nginx服务3. 验证Nginx是否启动成功&#xff1a; 二、导入接口文档1. 黑马程序员提供的YApi平台2. YApi Pro平台3. 推荐工具&#xff1a;Apifox 三、Swagger1. 常用注解1.1 Api与ApiModel1.2 ApiModelProperty与Ap…

BLUEM2引擎源码2025最新版

BLUE 引擎解析&#xff1a;传奇私服圈中的热门引擎 一、BLUE 引擎简介 BLUE 引擎是传奇私服圈子中较为知名的一款游戏引擎&#xff0c;它在传统的传奇引擎基础上进行了优化和扩展&#xff0c;使得私服开发者可以更加方便地搭建和管理服务器。相比于早期的 GEE、LEG、Hero 等引…

【RAG】检索后排序 提高回答精度

问题: RAG中&#xff0c;有时&#xff0c;最合适的答案不一定排在检索的最前面 user_query "how safe is llama 2" search_results vector_db.search(user_query, 5)for doc in search_results[documents][0]:print(doc"\n")response bot.chat(user_qu…

采用内存局部性分配有什么好处?

内存分配时的局部性分配&#xff08;Locality of Allocation&#xff09;是指将相关的内存对象分配在相邻或相近的内存区域中。这种分配策略在现代计算机系统中具有显著的好处&#xff0c;主要体现在以下几个方面&#xff1a; 1. 提高缓存命中率 现代计算机系统依赖于多级缓存…

【Dubbo+Zookeeper】——SpringBoot+Dubbo+Zookeeper知识整合

&#x1f3bc;个人主页&#xff1a;【Y小夜】 &#x1f60e;作者简介&#xff1a;一位双非学校的大二学生&#xff0c;编程爱好者&#xff0c; 专注于基础和实战分享&#xff0c;欢迎私信咨询&#xff01; &#x1f386;入门专栏&#xff1a;&#x1f387;【MySQL&#xff0…

使用阿里云操作系统控制台排查内存溢出

引言 操作系统控制台是阿里云最新推出的一款智能运维工具&#xff0c;专为提升运维效率、优化服务器管理而设计。它集成了多种运维管理功能&#xff0c;包括操作系统助手、插件管理器以及其他实用工具&#xff0c;为用户提供一站式的运维解决方案。无论是个人开发者还是企业运…

3.3.2 Proteus第一个仿真图

文章目录 文章介绍0 效果图1 新建“点灯”项目2 添加元器件3 元器件布局接线4 补充 文章介绍 本文介绍&#xff1a;使用Proteus仿真软件画第一个仿真图 0 效果图 1 新建“点灯”项目 修改项目名称和路径&#xff0c;之后一直点“下一步”直到完成 2 添加元器件 点击元…

深入了解Linux —— 调试程序

前言 我们已经学习了linux下许多的工具&#xff0c;vim、gcc、make/makefile等&#xff1b; 已经能够在linux写代码&#xff0c;并且进行编译运行&#xff0c;让程序在linux下跑起来。 但是&#xff0c;如果我们在写代码的时候遇见了错误&#xff1b;但是我们并不知道错误在哪&…

Hive-优化(语法优化篇)

列裁剪与分区裁剪 在生产环境中&#xff0c;会面临列很多或者数据量很大时&#xff0c;如果使用select * 或者不指定分区进行全列或者全表扫描时效率很低。Hive在读取数据时&#xff0c;可以只读取查询中所需要的列&#xff0c;忽视其他的列&#xff0c;这样做可以节省读取开销…