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.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. 緩存機制&…