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

xml中resultMap 的用法,数据库 JSON 字符串 → Java List/对象

文章目录

      • 一、`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.dtcms.com/a/344554.html

相关文章:

  • Build a Webhook for a Chatbot Using Python
  • Python处理JSON数据的最佳实践:从基础到进阶的实用指南
  • 深入理解深度学习中的“Batch”
  • SSM框架基础知识-Spring-Spring整合MyBatis
  • 数据安全——39页解读数字化转型大数据安全基础培训方案【附全文阅读】
  • [react] js容易混淆的两种导出方式2025-08-22
  • 6020角度双环控制一种用于电机控制的策略
  • Numpy模块下的ndarray介绍
  • vscode 插件 远程服务器无法下载
  • Axure下载安装教程(附安装包)Axure RP 11 超详细下载安装教程
  • AI多模态分析框架下的黄金下跌波动:鲍威尔讲话前的政策信号与量化因子共振
  • Mongodb操作指南
  • kafka的rebalance机制是什么
  • 赛思电子工业级晶振,工业控制的隐形“智”动力
  • Linux服务器定时监测服务脚本
  • det_cam_visualizer.py 函数逐行解读记录
  • (纯新手教学)计算机视觉(opencv)实战八——四种边缘检测详解:Sobel、Scharr、Laplacian、Canny
  • Redis 678
  • 2025-08-22 Python进阶10——魔术方法
  • K8s的相关知识总结
  • X00238-非GNSS无人机RGB图像卫星图像视觉定位python
  • Django中间件自定义开发指南:从原理到实战的深度解析
  • 广播级讯道摄像机CCU后挂上的PGM、ENG、PROD音频旋钮是做什么用的?
  • js:beforeUnload这个方法能不能监听到关闭浏览器和刷新浏览器行为
  • 视觉语言大模型应用开发——基于 CLIP、Gemini 与 Qwen2.5-VL 的视频理解内容审核全流程实现
  • uniapp image标签展示视频第一帧
  • 【Linux】Vim编辑器:从入门到高效使用
  • MiniCPM-V4.0开源并上线魔乐社区,多模态能力进化,手机可用,还有最全CookBook!
  • WebRTC 结合云手机:释放实时通信与虚拟手机的强大协同效能
  • 聚焦科技前沿,华金证券与非凸科技共探数智交易新路径