文章目录

      • 一、`resultMap` 核心作用
      • 二、基本用法(以你的配置为例)
        • 1. 定义 `resultMap`
        • 2. 在 SQL 中使用 `resultMap`
      • 三、关键注意事项

resultMap 是 MyBatis 中用于定义数据库表字段与 Java 实体类属性之间映射关系的核心配置,解决表字段名和实体类属性名不一致、复杂类型转换(如 JSON 转 List)等问题。

一、resultMap 核心作用

  1. 字段映射:当数据库表字段名(如 user_id)与 Java 实体类属性名(如 userId)不一致时,通过 resultMap 明确对应关系,避免查询结果为 null
  2. 类型转换:处理特殊类型字段(如数据库 JSON 字符串 → Java List/对象),通过 typeHandler 指定转换处理器(如 JacksonTypeHandler)。
  3. 复用性:定义一次映射规则,多个 SQL 语句可通过 resultMap="ID" 复用,减少重复配置。

二、基本用法(以你的配置为例)

1. 定义 resultMap
<!-- id:映射规则的唯一标识(自定义,如 UserCustomCategoriesMap) -->
<!-- type:对应的 Java 实体类全路径 -->
<resultMap id="UserCustomCategoriesMap" type="com.fuka.system.domain.UserCustomCategories"><!-- 主键字段映射:id 标签用于主键 --><id property="id" column="id"/>  <!-- property:实体类属性名;column:数据库表字段名 --><!-- 普通字段映射:result 标签用于非主键 --><result property="userId" column="user_id"/>  <!-- 表字段 user_id → 实体类 userId --><!-- 特殊类型字段:通过 typeHandler 处理 JSON 转 List<Integer> --><result property="dictId" column="dict_id" typeHandler="com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler"/><!-- 时间字段映射(表字段 create_time → 实体类 createTime) --><result property="createTime" column="create_time"/><result property="updateTime" column="update_time"/>
</resultMap>
2. 在 SQL 中使用 resultMap

定义好映射规则后,在 SQL 语句中通过 resultMap 属性引用(替代 resultType):

<!-- 查询用户自定义分类,使用上面定义的映射规则 -->
<select id="getUserCustomCategories" resultMap="UserCustomCategoriesMap">SELECT id, user_id, dict_id, create_time, update_time FROM sys_user_custom_categories WHERE user_id = #{userId}
</select>
  • 执行该 SQL 时,MyBatis 会按照 UserCustomCategoriesMap 的规则:
    • user_id 字段值赋值给实体类的 userId 属性;
    • JacksonTypeHandlerdict_id 的 JSON 字符串转为 List<Integer> 并赋值给 dictId
    • 其他字段按规则一一映射。

三、关键注意事项

  1. 字段名匹配:若表字段名与实体类属性名完全一致(如 id),可省略映射配置,但建议显式写出,清晰易懂。
  2. resultType** 与 resultMap 区别**:
    • resultType:直接指定返回类型(如 resultType="com.xxx.User"),要求表字段名与实体类属性名完全一致(或通过别名 AS 匹配)。
    • resultMap:适用于字段名不一致、需要类型转换的场景,灵活性更高。
  3. 复用性:同一实体类的多个 SQL 语句(如查询、关联查询)可共用一个 resultMap,减少重复配置。

简单说,resultMap 就是 MyBatis 的“翻译官”,告诉框架如何把数据库查询结果“翻译”成 Java 对象,尤其在字段名不一致或有特殊类型时必须用到。

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PySINDy

PySINDy A Python package for the Sparse Identification of Nonlinear Dynamics from Data Abstract PySINDy 是一个用于从数据中发现主导动力系统模型的 Python 软件包。具体来说&#xff0c;PySINDy 提供了应用非线性动力学稀疏辨识&#xff08;SINDy&#xff09;[1] 方法…

校园跑腿小程序源码 | 跑腿便利店小程序(源码下载)

校园跑腿小程序源码 | 跑腿便利店小程序 本项目后端采用 midway3.0&#xff0c;后台采用 nuxt2.x,小程序采用 uniapp 实现的一套跑腿下单接单系统。 主要功能&#xff1a;跑腿、快递代取、陪练陪玩、软件安装、申请接单、用户下单、提现、物品重量计算等。 源码下载&#xf…

基于stm32的物联网OneNet火灾报警系统

1 系统功能介绍 本设计为基于STM32单片机的物联网OneNet火灾报警系统。系统通过采集环境中的温湿度、火焰检测数据&#xff0c;并结合物联网技术上传至OneNet云平台&#xff0c;实现远程监控和报警功能。系统还具备蜂鸣器报警、LED灯闪烁等本地报警功能&#xff0c;保证在火灾发…

校园跑腿小程序源码 _ 跑腿便利店小程序 含搭建教程

内容目录一、详细介绍二、效果展示1.部分代码2.效果图展示三、学习资料下载一、详细介绍 校园跑腿小程序源码 | 跑腿便利店小程序 本项目后端采用 midway3.0&#xff0c;后台采用 nuxt2.x,小程序采用 uniapp 实现的一套跑腿下单接单系统。 主要功能&#xff1a;跑腿、快递代…

数据结构:2-3-4 树 和 B 树

目录 我们为什么需要 2-3-4 树&#xff1f; 2-3-4 树的插入操作 从零推导代码 B 树 (B-Tree) 从零推导代码 我们沿着自平衡树的演化路径继续前进。我们已经学习了 2-3 树如何通过“分裂与提升”来替代 AVL 树的“旋转”&#xff0c;但其修复过程是“自下而上”的。现在&am…

Python爬虫实战:构建港口物流数据采集和分析系统

1. 引言 1.1 研究背景与意义 在全球化背景下,港口作为 “一带一路” 倡议的关键节点,其运营效率直接影响国际贸易流通速度。港口管理部门、物流企业及贸易公司需实时掌握船舶动态、货物吞吐量等信息以优化调度、降低成本。然而,这些信息分散于: 港口官方网站(如上海港、…

新型隐蔽恶意软件利用TP-Link、思科等路由器漏洞获取远程控制权

攻击概况安全研究人员近期发现针对多品牌网络设备的新型恶意软件攻击活动&#xff0c;受影响设备包括DrayTek、TP-Link、Raisecom和思科等厂商的路由器。2025年7月期间&#xff0c;攻击者通过利用嵌入式Web服务中的未授权命令注入漏洞传播隐蔽加载程序。初始入侵通过简单的HTTP…

对线性代数伴随矩阵的深入理解

伴随矩阵的几何直观&#xff1a;缩放倍率为det⁡(A)n−1\det (A)^{n-1}det(A)n−1的逆变换。 A⋅A∗∣A∣EA\cdot A^*|A|EA⋅A∗∣A∣E 最终得到的结果是将原像空间各基向量缩放了det⁡(A)\det (A)det(A)倍&#xff0c;故空间总体上是被放大了∣A∣n|A|^{n}∣A∣n倍。 为什么是…

uni-app 组件之自定义导航栏

前言上一篇简单的介绍了一下什么是组件&#xff0c;即组件是一个单独且可复用的功能模块的封装。所以这篇文章主要在实际开发中自己动手封装一个简单的导航栏组件&#xff0c;当然在插件市场有很多&#xff0c;但是自己动手封装一个才能真正领会其中的意义。一、自定义组件1.创…

android vehicle

Android Vehicle HAL架构-腾讯云开发者社区-腾讯云 Android vehicle车辆属性新增demo-CSDN博客 【IVI】VehicleService启动_android ivi-CSDN博客

【人工智能】神经网络的优化器optimizer(三):RMSProp动态自适应学习率优化器

一、算法核心原理 RMSProp&#xff08;Root Mean Square Propagation&#xff09;是深度学习先驱Geoffrey Hinton在2012年提出的优化算法&#xff0c;它基于AdaGrad算法的改进&#xff0c;创新性地解决了传统梯度下降法中学习率固定不变的局限性。该算法的核心机制在于采用指数…

全面解析了Java微服务架构的设计模式

一、引言&#xff1a;微服务架构的背景与优势随着互联网应用的复杂度不断提升&#xff0c;传统的单体架构&#xff08;Monolithic Architecture&#xff09;在可维护性、可扩展性、部署灵活性等方面逐渐暴露出瓶颈。微服务架构&#xff08;Microservices Architecture&#xff…

本地组策略编辑器图形化工具

本地组策略图形化工具&#xff0c;添加用户权限分配功能。这将包括常见的用户权限策略设置&#xff1a; 目前版本在优化中&#xff0c;后续会添加更多功能。 # GroupPolicyGUI.ps1 # 需要以管理员权限运行Add-Type -AssemblyName System.Windows.Forms Add-Type -AssemblyName …

深度学习卷积神经网络项目实战——超市商品分类

卷积神经网络项目实战 1.项目简介 1.1项目名称 ​ 基于CNN实现超市商品的混合颗粒度分类&#xff08;500分类&#xff09; 1.2 项目简介 ​ 该项目旨在通过卷积神经网络&#xff08;CNN&#xff09;实现超市商品的混合颗粒度分类&#xff0c;主要针对商品的不同种类进行分…

网站如何被搜索引擎收录(Google、Bing、百度等)

1. 【Google 收录】注册 Google Search Console&#xff1a; https://search.google.com/search-console添加网站&#xff08;主域名、子域名都加&#xff09;验证所有权&#xff08;用 DNS、HTML 文件、Meta Tag 都可以&#xff09;提交 Sitemap&#xff08;/sitemap.xml&…

JDK 8 → JDK 17 升级说明书(面向 Spring Boot / Spring Cloud / Spring )

自从 JDK 8 发布以来&#xff0c;Java 语言在持续进化&#xff0c;带来了许多新的功能和性能改进。而 JDK 17 作为一个长期支持版本&#xff08;LTS&#xff09;&#xff0c;在许多方面超越了 JDK 8&#xff0c;不仅提升了语言本身的能力&#xff0c;还进一步提高了性能、可维护…

【ElasticSearch】使用docker compose,通过编写yml安装es8.15和kibana可视化界面操作,go连接es

使用 Docker 安装 Elasticsearch Docker 搭建 Elasticsearch Kibana 环境&#xff0c;并在过程中标注常见问题和解决方案。 1. 准备工作 在开始之前&#xff0c;请确认你本地已经安装了&#xff1a; 工具版本建议检查方式Docker≥ 20.xdocker -vDocker Compose≥ 2.xdocker …

《C 语言文件操作补充:字符串格式化与随机读写全解析》

目录 一. sprintf函数和sscanf函数 1.1 sprintf 函数&#xff1a;将格式化数据写入字符串 1.2 sscanf 函数&#xff1a;从字符串中格式化读取数据 二. 文件的随机读写 2.1 fseek 函数&#xff1a;移动文件读写指针 2.2 ftell 函数&#xff1a;获取当前指针位置 2.3 rew…

SOME/IP-SD报文中 Entry Format(条目格式)-理解笔记4

逐字段解析 AUTOSAR SOME/IP Service Discovery 中的 Entry 格式。我们将它拆解成几个部分&#xff0c;并用清晰的排版和比喻来确保每个字段都得到解释。&#x1f4dc; Entry 的完整结构&#xff1a;三层蛋糕 一条完整的 SD Entry 信息就像一块三层蛋糕&#xff0c;从上到下分别…

在 vue3 和 vue2 中,computed 计算属性和 methods 方法区别是什么

在 Vue 2 和 Vue 3 中&#xff0c;computed&#xff08;计算属性&#xff09;和 methods&#xff08;方法&#xff09;都是处理数据逻辑的方式&#xff0c;但它们在缓存机制、使用场景、执行时机等方面有显著区别&#xff0c;且这些区别在两个版本中保持一致。 1. 缓存机制&…