Mybatis——返回值(resultType&resultMap)詳解

之前的文章里面有對resultType和resultMap的簡單介紹這一期出點詳細的

resultType:

1,返回值為簡單類型。
? ? ? ? 直接使用resultType=“類型”,如string,Integer等。

 String getEmpNameById(Integer id);
<!-- 指定 resultType 返回值類型時 String 類型的,string 在這里是一個別名,代表的是 java.lang.String 對于引用數據類型,都是將大寫字母轉小寫,比如 HashMap 對應的別名是 'hashmap'基本數據類型考慮到重復的問題,會在其前面加上 '_',比如 byte 對應的別名是 '_byte'--><select id="getEmpNameById" resultType="string">select username from t_employee where id = #{id}</select>

?2.返回值為List類型。


? ? ? ?使用resultType=“list元素的類型”,一般是實體類如User,也可以是Map,對應返回值類型是List<User> , List<Map<String,Object>>,不管是哪種,最終結果會根據接口返回值類型自動將多個 resultType指定的類型的元素(User或以一條記錄為一個Map)組裝成List。

 List<User> getUser(String age);
<select id="getUser" resultType="User">select * from userwhereage = #{age}</select>
 List<Map<String,Object>> findUserList();
 <select id="findUserList"  parameterType="int" resultType="java.util.Map">SELECT * FROM user</select>

?用java.util.List也是可以的,java.util.Map也是可以的至于為什么我沒有沒有研究過

?3.返回值為Map類型。(使用map要注意查詢結果的條數,多條會報錯)

1.?如果查詢的結果是一條,我們可以把查詢的數據以{表字段名, 對應的值}方式存入到Map中。

   Map<String, Object> getEmpAsMapById(Integer id);
  <!-- 注意這里的 resultType 返回值類型是 'map'--><select id="getEmpAsMapById" resultType="map">select * from t_employee where id = #{id}</select>

?

2.?如果查詢的結果是多條數據,我們也可以把查詢的數據以{表中某一字段名, JavaBean}方式來封裝成Map

// 查詢所有員工的信息,把數據庫中的 'id' 字段作為 key,對應的 value 封裝成 Employee 對象// @MapKey 中的值表示用數據庫中的哪個字段名作 key@MapKey("id")Map<Integer, Employee> getAllEmpsAsMap();
 <!--注意 resultType 返回值類型,不再是 'map',而是 Map 的 value 對應的 JavaBean 類型--><select id="getAllEmpsAsMap" resultType="employee">select * from t_employee</select>

?擴展.?上面返回結果的形式都是基于查詢 (select) 的,其實對于增刪改的操作也可以返回一定類型的數據,比如BooleanInteger等。

?resultMap:

?屬于自定義的映射,用于由于各種原因數據庫的字段名跟實體類的字段名不一致

1.Emp實體類的屬性:

    private Integer empId;private String empName;private Integer age;private String gender;

2.表字段名:?

emp_idemp_nameagegenderdept_id

??3.映射文件配置:

<!--  Emp getEmpById(@Param("emp_id") Integer emp_id);--><select id="getEmpById" resultType="Emp">select * from t_emp where emp_id = #{emp_id}</select>

4.執行結果發現empId=null,empName=null

原因:數據庫表字段名中的emp_id,emp_name與實體類的屬性名empId,empName不一致,由數據庫不能映射到實體類屬性對應的屬性名

?1. 方式一 字段名設置別名

select emp_id empid from emp where emp_id  =  #{emp_id}

?2. 方式二 下劃線映射為駝峰(在配置文件中配置)

<!--引入properties文件,此時就可以${屬性名}的方式訪問屬性值--><properties resource="jdbc.properties"/><!--配置mybatis自動轉換為駝峰式命名--><settings><setting name="mapUnderscoreToCamelCase" value="true"/><!--開啟延遲加載--><setting name="lazyLoadingEnabled" value="true" /></settings>

3. 方式三 自定義映射resultMap
resultMap: 設置自定義的映射關系
id: 唯一標識–>resultMap=" "
type: 處理映射關系的實體類的類型
標簽:
id: 處理主鍵和實體類中屬性的映射關系
result: 處理普通字段和實體類中屬性的映射關系
column: 設置映射關系中的字段名,必須是sql中的某字段
property: 設置映射關系中的屬性的屬性名,必須為實體類中的屬性名

 <resultMap id="empDeptMapResultMapOne" type="Emp"><id property="eid" column="eid"></id><result property="empName" column="emp_name"></result><result property="age" column="age"></result><result property="sex" column="sex"></result><result property="email" column="email"></result><result column="did" property="dept.did"></result><result column="dname" property="dept.dname"></result></resultMap><select id="getEmpAndDept" resultMap="empDeptMapResultMapTwo">select emp.*,dept.* from emp left join dept on emp.did = dept.did where emp.eid = #{eid}</select>


?

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/41917.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/41917.shtml
英文地址,請注明出處:http://en.pswp.cn/news/41917.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Linux內核源碼剖析之TCP保活機制(KeepAlive)

寫在前面&#xff1a; 版本信息&#xff1a; Linux內核2.6.24&#xff08;大部分centos、ubuntu應該都在3.1。但是2.6的版本比較穩定&#xff0c;后續版本本質變化也不是很大&#xff09; ipv4 協議 https://blog.csdn.net/ComplexMaze/article/details/124201088 本文使用案例…

高級AI賦能Fortinet FortiXDR解決方案

擴展檢測和響應 (XDR&#xff1a;Extended Detection and Response) 解決方案旨在幫助組織整合分布式安全技術&#xff0c;更有效地識別和響應活動的威脅。雖然 XDR 是一種新的技術概念&#xff0c;但其構建基礎是端點檢測和響應 (EDR&#xff1a;Endpoint Detection and Respo…

代碼隨想錄算法訓練營第50天|動態規劃part11

8.16周三 123.買賣股票的最佳時機III 188.買賣股票的最佳時機IV 詳細布置 123.買賣股票的最佳時機III 題目&#xff1a;最多買賣兩次 題解&#xff1a; 1、 dp[i][0]沒有操作 &#xff08;其實我們也可以不設置這個狀態&#xff09; dp[i][1]第一次持有股票 dp[i][2]第一…

CSDN?索尼 toio?應用創意開發征集征集活動 創意公示! 入選的用戶看過來~

索尼toio?應用創意開發征集活動自開啟以來&#xff0c;收到了很多精彩的創意&#xff01;接下來&#xff0c;我們將公示入選的20個優秀創意和10個入圍創意&#xff0c;以下提到ID的小伙伴注意啦&#xff0c;你們將有機會順利進入活動的第二階段&#xff0c;注意查收你們的信箱…

javaScript:快樂學習計時器

目錄 一.前言 二.計時器 1.計時器的分類 2. 創建計時器的方式 創建間隔計時器 創建方式三種 1.匿名函數 2.使用函數直接作為計時器的執行函數 2.使用函數直接作為計時器的執行函數,用字符串的形式寫入 3.計時器的返回值 4.清除計時器 5.延遲計時器 相關代碼 一.前言 在…

Linux--實用指令與方法(部分)

下文主要是一些工作中零碎的常用指令與方法 實用指令與方法&#xff08;部分&#xff09; linux長時間保持ssh連接 這個問題的原因是&#xff1a;設置檢測時間太短&#xff0c;或者沒有保持tcp長連接。 解決步驟&#xff1a; 步驟1&#xff1a;打開sshd配置文件&#xff0…

nbcio-boot從3.0升級到3.1的出現用戶管理與數據字典bug

升級后出現 系統管理里的用戶管理出現下面問題 2023-08-17 09:44:38.902 [http-nio-8080-exec-4] [1;31mERROR[0;39m [36mo.jeecg.common.exception.JeecgBootExceptionHandler:69[0;39m - java.lang.String cannot be cast to java.lang.Long java.lang.ClassCastException:…

【JS 線性代數算法之向量與矩陣】

線性代數算法 一、向量的加減乘除1. 向量加法2. 向量減法3. 向量數乘4. 向量點積5. 向量叉積 二、矩陣的加減乘除1. 矩陣加法2. 矩陣減法3. 矩陣數乘4. 矩陣乘法 常用數學庫 線性代數是數學的一個分支&#xff0c;用于研究線性方程組及其解的性質、向量空間及其變換的性質等。在…

windows bat腳本,使用命令行增加/刪除防火墻:入站-出站,規則

常常手動設置防火墻的入站或出站規則&#xff0c;比較麻煩&#xff0c;其實可以用命令行搞定。 下面是禁用BCompare.exe連接網絡的例子&#xff1a; ECHO OFF&(PUSHD "%~DP0")&(REG QUERY "HKU\S-1-5-19">NUL 2>&1)||(powershell -Comm…

web即時通訊系統與APP即時通訊系統有什么區別?

隨著互聯網的不斷發展&#xff0c;即時通訊技術也在不斷地完善和發展&#xff0c;其中Web即時通訊系統和APP即時通訊系統成為了人們廣泛使用的兩種通訊方式。那么&#xff0c;這兩者之間究竟有什么區別呢&#xff1f;在本文中&#xff0c;我們將為您詳細介紹這兩種通訊方式的區…

如何將labelImg打包成exe

最近整理一下數據標注這塊的內容&#xff0c;在目標檢測和目標分割里面用的最多的標注工具labelimg&#xff0c;labelme labelimg主要用于目標檢測領域制作自己的數據集&#xff0c;如&#xff1a;YOLO系列目標檢測模型 labelme主要用于圖像分割領域制作自己的數據集&#xf…

如何仿寫簡易tomcat 實現思路+代碼詳細講解

仿寫之前&#xff0c;我們要搞清楚都要用到哪些技術 自定義注解&#xff0c;比如Tomcat使用的是Servlet&#xff0c;我們可以定義一個自己的MyServlet構造請求體和返回體&#xff0c;比如tomcat使用HttpRequest&#xff0c;我們可以自己定義myHttpRequestjava去遍歷一個指定目…

Structs新增接口 報錯404,找不到資源

起因&#xff1a;最近在一個古老框架structs上開發新功能&#xff0c;由于之前沒接觸過&#xff0c;故此記錄 新增接口&#xff0c; 接口類&#xff1a; Path("/A") Produces({ MediaType.APPLICATION_JSON }) public interface Money {POSTPath("/B")Resu…

數據結構——鏈表詳解

鏈表 文章目錄 鏈表前言認識鏈表單鏈表結構圖帶頭單循環鏈表結構圖雙向循環鏈表結構圖帶頭雙向循環鏈表結構圖 鏈表特點 鏈表實現(帶頭雙向循環鏈表實現)鏈表結構體(1) 新建頭節點(2) 建立新節點(3)尾部插入節點(4)刪除節點(5)頭部插入節點(6) 頭刪節點(7) 尋找節點(8) pos位置…

網絡編程socket.close/output.close/socket.shutdownOutput區別與流程分析

文章目錄 三種方法效果的區別套接字Socket關閉與釋放的區別服務器執行三種關閉操作后&#xff0c;繼續發送/接收數據會發生什么socket.shutdownOutput 關閉連接 找了半個小時沒一個說明白的帖子&#xff0c;真的折磨 三種方法效果的區別 socket.close()Socket主動禁止輸入和輸…

APP外包開發原生和H5的區別

原生開發和H5開發是兩種不同的方法&#xff0c;用于創建移動應用程序。它們具有各自的特點、優勢和劣勢&#xff0c;適用于不同的應用場景。以下是原生開發和H5開發之間的一些主要區別&#xff0c;希望對大家有所幫助。北京木奇移動技術有限公司&#xff0c;專業的軟件外包開發…

DELETE 與TRUNCATE區別

DELETE 與TRUNCATE區別 要清空 PostgreSQL 中的表數據&#xff0c;可以使用 DELETE 或 TRUNCATE 語句。下面是兩種方法的示例&#xff1a; 使用 DELETE 語句清空表數據&#xff1a; DELETE FROM 表名;例如&#xff0c;要清空名為 users 的表數據&#xff1a; DELETE FROM u…

未來公文的智能化進程

隨著技術的飛速發展&#xff0c;公文——這個有著悠久歷史的官方溝通方式&#xff0c;也正逐步走向智能化的未來。自動化、人工智能、區塊鏈...這些現代科技正重塑我們的公文制度&#xff0c;讓其變得更加高效、安全和智慧。 1.語義理解與自動生成 通過深度學習和NLP&#xff…

14-案例:購物車

綜合案例-購物車 需求說明: 1. 渲染功能 v-if/v-else v-for :class 2. 刪除功能 點擊傳參 filter過濾覆蓋原數組 3. 修改個數 點擊傳參 find找對象 4. 全選反選 計算屬性computed 完整寫法 get/set 5. 統計 選中的 總價 和 數量 計算屬性conputed reduce條件求和 6. 持久化到本…

電子商務公開密鑰加密法

(一)定義與應用原理 公開密鑰加密法是針對私有密鑰加密法的缺陷而提出來的。是電子商務應 用的核心密碼技術。所謂公開密鑰加密&#xff0c;就是指在計算機網絡上甲、乙兩用戶之間 進行通信時&#xff0c;發送方甲為了保護要傳輸的明文信息不被第三方竊取&#xff0c;采用密…