mybatis中resultType和resultMap的聯繫

来源:http://www.cnblogs.com/ChoviWu/archive/2017/07/16/7190311.html
-Advertisement-
Play Games

在使用mybatis進行資料庫連接操作時對於SQL語句返回結果的處理通常有兩種方式,一種就是resultType另一種就是resultMap,下麵說下我對這兩者的認識和理解 比如,我們平時使用的單表查詢,很多時候使用的就是resultType 下來,看一段代碼吧 上面的PO類我使用的是我的一個小De ...


在使用mybatis進行資料庫連接操作時對於SQL語句返回結果的處理通常有兩種方式,一種就是resultType另一種就是resultMap,下麵說下我對這兩者的認識和理解

 

比如,我們平時使用的單表查詢,很多時候使用的就是resultType

下來,看一段代碼吧

 1 package org.cxxy.base.cxsc.entity;
 2 
 3 public class TbClass {
 4     private Integer id;
 5 
 6     private String classname;
 7 
 8     private String deptname;
 9 
10     public Integer getId() {
11         return id;
12     }
13 
14     public void setId(Integer id) {
15         this.id = id;
16     }
17 
18     public String getClassname() {
19         return classname;
20     }
21 
22     public void setClassname(String classname) {
23         this.classname = classname == null ? null : classname.trim();
24     }
25 
26     public String getDeptname() {
27         return deptname;
28     }
29 
30     public void setDeptname(String deptname) {
31         this.deptname = deptname == null ? null : deptname.trim();
32     }
33 }

上面的PO類我使用的是我的一個小Demo

下來開始貼我的XML Mapper

 

<resultMap id="BaseResultMap" type="org.cxxy.base.cxsc.entity.TbClass">
    <id column="id" jdbcType="INTEGER" property="id" />
    <result column="classname" jdbcType="VARCHAR" property="classname" />
    <result column="deptname" jdbcType="VARCHAR" property="deptname" />
</resultMap>

這個resultMap是對應的我的po類的屬性

下來,貼出我的xml的單表查詢statement

<select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="BaseResultMap">
select 
 id, classname, deptname
from tb_class
where id = #{id,jdbcType=INTEGER}
</select>
 

parameterType代表的是輸入參數(比如:select * from tb_class where id = "xxxx"),resultMap表示映射的結果集,從命名中也可以看到Map,當然是結果集了,

上述代碼所代表的單表查詢(一對一),當然,在一般開發的時候,像這種映射,我們一般會使用下述的寫法

<select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="類的全限定名">
select 
 id, classname, deptname
from tb_class
where id = #{id,jdbcType=INTEGER}
</select>

即是說所得到的結果一樣,一般在我們理解方面,儘量還是選擇後者

但是如果根據客戶的需求的變化,比如說寫出了類的擴展類

org.cxxy.base.cxsc.entity.TbClassDatail

如果,在擴展類中引入了外類(其他的表的屬性(和本類沒有共同的屬性)),我們可以使用resultMap,但是也並非完全

resultMap

定義po類
在Orders類中加入User屬性。
在Orders類中加入List<Orderdetail> orderdetails屬性

 訂單查詢清單

<select id="findOrdersDetailList" resultMap="userorderdetailmap">
    SELECT
    orders.*,
    user.username,
    user.address,
    orderdetail.id orderdetail_id,
    orderdetail.items_id,
    orderdetail.items_num
    FROM orders,user,orderdetail
    WHERE orders.user_id = user.id
    AND orders.id = orderdetail.orders_id
</select> 

 <!-- 訂單信息resultmap -->

<!-- 訂單信息resultmap -->
<resultMap type="cn.itcast.mybatis.po.Orders" id="userorderdetailmap">
<id property="id"column="id"/>
<result property="user_id" column="user_id"/>
<result property="number" column="number"/>
<association property="user" javaType="cn.itcast.mybatis.po.User">
<id property="id" column="user_id"/>
<result property="username" column="username"/>
<result property="address" column="address"/>
</association>
<collection property="orderdetails" ofType="cn.itcast.mybatis.po.Orderdetail">
    <id property="id" column="orderdetail_id"/>
    <result property="items_id" column="items_id"/>
    <result property="items_num" column="items_num"/>
</collection>
</resultMap>

上面的代碼,我是貼的某培訓機構的訂單查詢代碼,

  上面的實體類的關係是:Order----->User  一對一(一個用戶一個訂單)      Order------->OrderDetail  一對多(一個訂單有多條訂單明細)

像這種的一對多、多對多查詢的映射,我們儘量使用resultMap

註:collection 標簽是一對多的映射,常用於一對多中擴展類下的List<po對象>的屬性
association標簽適用擴展類包含的一對一的po類對象屬性

總結一下

resultType:

作用:

         將查詢結果按照sql列名pojo屬性名一致性映射到pojo中(適用於單表僅查詢)。

場合:

         常見一些明細記錄的展示,比如用戶購買商品明細,將關聯查詢信息全部展示在頁面時,此時可直接使用resultType將每一條記錄映射到pojo中,在前端頁面遍歷list(list中是pojo)即可。

好了,今天就分享到這裡,以上僅為我自己的觀點,博主現在大學生一枚,理解可能不是很充分,希望大牛能夠多提提意見,謝謝。

 版權聲明:本文為博主原創文章,未經博主允許不得轉載。

原帖地址:http://www.cnblogs.com/ChoviWu/p/7190311.html


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 由於數據類型多,要按照逐個類型寫一個類型轉換的方法的話一是代碼量多,顯得累贅。 ...
  • 電商平臺 都會有搶購的情況,比如 1元搶購。 而搶購 最重要的 就是庫存,很多情況下 庫存處理不好,就會出現超賣現象。 本文將用redis為緩存,StackExchange 框架,消息隊列方式 實現分散式鎖的情況 一,效果 先看效果, 窗體下單 構建高併發情況 開多個控制台應用程式 處理訂單 二,配 ...
  • 在asp.net中常見的<%%>方式有如下幾種: <%%>、<%=%>、<%:%>、<%#%>、<%$%>、<%@%> <%%>:書寫後臺代碼,如C#、vb等代碼 <%=%>:計算=後面的表達式,並將結果輸出 <%:%>:將:號後面的內容編碼輸出,實際<%=Server.HtmlEncode()%> ...
  • 一、C#語言 C#是微軟在2000開始推出的一種面向對象的編程語言。 它簡單易學、類型安全,可以用非常簡潔易懂的代碼寫出理想的功能,大大提高了開發人員的工作效率,並降低了程式的維護成本。 作為一種面向對象的語言,C#支持封裝、繼承和多態等概念。 按照微軟一貫的語法糖作風,在C#後續的版本里,陸續推出 ...
  • 編碼 ASCII--0~127 65-A 97-a 西歐碼表 ISO-8859-1 0-255 1個位元組 gb2312 0-65535 gbk 2個位元組 Unicode編碼體系 utf-8 3個位元組 中 f bit位 Byte位元組 1Byte = 8bit 1KB=1024B MB GB TB PB ...
  • Java中的二進位及基本的位運算 二進位是計算技術中廣泛採用的一種數制。二進位數據是用0和1兩個數位來表示的數。它的基數為2,進位規則是“逢二進一”,借位規則是“借一當二”,由18世紀德國數理哲學大師萊布尼茲發現。當前的電腦系統使用的基本上是二進位系統,數據在電腦中主要是以補碼的形式存儲的。計算 ...
  • 走向開源! 這博客五月份做完,直到今天才發佈的原因是之前伺服器到期了,資料庫丟失沒有備份又重搞的才搞完也,每次想開放出來,讓更多人知道和提出寶貴建議,都會覺得自己的東西並不是那麼好,直到今天,我才覺得程式這東西,只有更多人體驗和反饋才會更好。 我始終不相信這世界上有這麼一句話:已經沒有比這更好的東西 ...
  • 上篇地址 :http://www.cnblogs.com/chinxi/p/7185309.html 有了一條會移動的“蛇”,就可以開始寫改變它方向的方法了。 由於這是運行在linux下的,沒有像windows下的getch()方法,想要輸入一個鍵,不輸入回車,就讓程式有響應,還是件麻煩事。 不過, ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...