神煩,老大讓講一下Mybatis中強大的resultMap

2021-02-19 程式設計師曉夢
resultType

resultType可以把查詢結果封裝到pojo類型中,但必須pojo類的屬性名和查詢到的資料庫表的欄位名一致。
如果sql查詢到的欄位與pojo的屬性名不一致,則需要使用resultMap將欄位名和屬性名對應起來,進行手動配置封裝,將結果映射到pojo中

resultMap

resultMap可以實現將查詢結果映射為複雜類型的pojo,比如在查詢結果映射對象中包括pojo和list實現一對一查詢和一對多查詢。

先在Mapper文件中,配置基本的sql語句

        <select id="queryOrderAll" resultMap="orderResultMap">        SELECT id, user_id,        number,        createtime, note FROM `order`    </select>

配置resultMap標籤,映射不同的欄位和屬性名

        <resultMap type="order" id="orderResultMap">                                <id property="id" column="id" />
<result property="userId" column="user_id" /> <result property="number" column="number" /> <result property="createtime" column="createtime" /> <result property="note" column="note" /> </resultMap>

結果就可以封裝到pojo類型中

使用resultMap進行關聯查詢一對一查詢

一對一數據模型:訂單用戶
一個訂單信息只會是一個人下的訂單,所以從查詢訂單信息出發關聯查詢用戶信息為一對一查詢。如果從用戶信息出發查詢用戶下的訂單信息則為一對多查詢,因為一個用戶可以下多個訂單。

<resultMap type="order" id="orderUserResultMap">    <id property="id" column="id" />    <result property="userId" column="user_id" />    <result property="number" column="number" />    <result property="createtime" column="createtime" />    <result property="note" column="note" />
<association property="user" javaType="user"> <id property="id" column="user_id" /> <result property="username" column="username" /> <result property="address" column="address" /> </association>
</resultMap>
<select id="queryOrderUserResultMap" resultMap="orderUserResultMap"> SELECT o.id, o.user_id, o.number, o.createtime, o.note, u.username, u.address FROM `order` o LEFT JOIN `user` u ON o.user_id = u.id</select>

測試

@Testpublic void testQueryOrderUserResultMap() {        SqlSession sqlSession = this.sqlSessionFactory.openSession();        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
List<Order> list = userMapper.queryOrderUserResultMap(); for (Order o : list) { System.out.println(o); } sqlSession.close();}

結果

相關焦點

  • Mybatis 強大的結果映射器ResultMap
    前言resultMap 元素是 MyBatis 中最重要最強大的元素。它可以讓你從 90% 的 JDBC ResultSets 數據提取代碼中解放出來,並在一些情形下允許你進行一些 JDBC 不支持的操作。實際上,在為一些比如連接的複雜語句編寫映射代碼的時候,一份 resultMap 能夠代替實現同等功能的數千行代碼。
  • mybatis框架之 resultMap 的高級應用
    各位小夥伴今天我們來了解resultMap 的高級應用mybatis 查詢多表資料庫表結構中存在的幾種多表關係:一對一 ,一對多, 多對一 ,多對多>用 resultType 標籤返回新創建的對象 UserDept,寫一下接口。
  • mybatis的resultMap完美解析(含github實例)!!!
    在 mybatis 中, resultMap 節點定義了結果集和結果對象(JavaBean)之間的映射規則。本文主要講解的是 resultMap 的解析。兩個基礎類在閱讀本文之前, 最好能對這兩個類有相應的理解。
  • Mybatisplus-plus 1.0.0 發布,掃描 Entity 類構建 ResultMap 主鍵...
    在xml中編寫resultmap是件頭痛的事,特別是表連接時返回的對象是多樣的,如果不按照map返回,分別建resultmap工作量會翻倍。使用@AutoMap註解entity實體類,就可以在應用啟動時解析使用@TableField註解的欄位,自動生成scan.mybatis-plus_xxxx為id的resultMap可以在xml中直接配置使用這個resultMap實例,並且還支持繼承關係,掃描實體子類會附加上父類的欄位信息一起構建子類的resultmap對於各種表連接形成的返回實體對象,可以通過繼承來生成。
  • Mybatis 中xml和註解映射,原來如此簡單
    的真正強大在於它的語句映射,這是它的魔力所在。由於它的異常強大,映射器的 XML 文件就顯得相對簡單。如果拿它跟具有相同功能的JDBC 代碼進行對比,你會立即發現省掉了將近 95% 的代碼。 致力於減少使用成本,讓用戶能更專注於 SQL 代碼。來自官網。
  • Java Mybatis CRUD增刪改查
    namespace中的包名要和Dao/Mapper接口的包名一致select(查詢)選擇,查詢語句;id:就是對應的namespace中的方法名;resultType" resultType="com.cy.pojo.User"> select * from mybatis.user </select> <select id="getUserById" parameterType="int" resultType="com.cy.pojo.User"> select * from mybatis.user
  • Mybatis 動態sql 學習總結
    mybatis 的動態sql語句是基於OGNL表達式的。可以方便的在 sql 語句中實現某些邏輯.總體說來mybatis 動態SQL 語句主要有以下幾類:  1. if 語句 (簡單的條件判斷)  2. choose (when,otherwize) ,相當於java 語言中的 switch ,與 jstl 中的choose 很類似.
  • Mybatis_day01
    4.5.parameterType和resultTypepatameterType:指定傳遞參數類型,mybatis通過ognl獲取參數拼接在sql語句中resultType:指定返回結果類型,mybatis可以把查詢結果封裝成Java對象,這裡就是把結果集映射成resultType指定的對象。
  • 記mybatis應用在springboot中的一次踩坑記錄
    有次從網上找了個springboot+mybatis+redis的web應用框架。簡單了解了下項目架構,就匆匆上手,照葫蘆畫瓢的做了個簡單的CRUD。看到項目中源作者在UserMapper.xml文件中,沒有定義user類型直接可以在resultType和parameterType中只用。
  • Mybatis【配置文件】
    映射文件配置文件和映射文件還有挺多的屬性我還沒有講的,現在就把它們一一補全在mapper.xml文件中配置很多的sql語句,執行每個sql語句時,封裝為MappedStatement對象,mapper.xml以statement為單位管理sql語句Statement的實際位置就等於namespace+StatementId
  • Java 持久層框架之 MyBatis
    DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration> <!-- 全局參數 --> <settings> <!
  • Mybatis【關聯映射】
    Mybatis【多表連接】我們在學習Hibernate的時候,如果表涉及到兩張的話,那麼我們是在映射文件中使用<set>..<many-to-one>等標籤將其的映射屬性關聯起來的…那麼在我們Mybatis中又怎麼做呢???
  • Spring Boot 2.X 實戰--SQL 資料庫(MyBatis)
    =utf8&serverTimezone=UTC 4spring.datasource.password=xiaoxian 5spring.datasource.username=root 6spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver 7# MyBatis 駝峰命名轉換 8mybatis.configuration.map-underscore-to-camel-case
  • Mybatis基礎最全總結
    DOCTYPE configuration        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"        "http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration>    <!
  • SpringBoot+Mybatis動態切換數據源
    SSM項目的讀寫分離,然後學習一下在SpringBoot中如何實現讀寫分離,這裡出於循序漸進的考慮,在這篇文章中我們先實現在SpringBoot+Mybatis架構下動態的切換數據源,後面的文章再實現讀寫分離。
  • Mybatis中trim標籤的使用教程
    mybatis的trim標籤一般用於去除sql語句中多餘的and關鍵字,逗號,或者給sql語句前拼接 「where「、「set「以及「values
  • mybatis中trim標籤的使用
    的trim標籤一般用於去除sql語句中多餘的and關鍵字,逗號,或者給sql語句前拼接 「where「、「set「以及「values(「 等前綴,或者添加「)「等後綴,可用於選擇性插入、更新、刪除或者條件查詢等操作。
  • 從Mybatis源碼分心詳解你不知道的Mybatis用法和細節
    強大的結果處理器ResultHandlerDO轉VO--常用方式通常情況下,我們的持久層的對象不會(不應該)直接響應給調用者,需要轉換為 VO 對象再響應出去。延遲加載我們知道,在 resultMap 中使用嵌套 select 查詢,並且全局聲明使用懶加載,可以實現按需加載嵌套屬性。
  • MyBatis 動態 SQL 詳解(以後寫 SQL 爽多了)
    動態 SQL 是 MyBatis 的強大特性之一。如果你使用過 JDBC 或其它類似的框架,你應該能理解根據不同條件拼接 SQL 語句有多痛苦,例如拼接時要確保不能忘記添加必要的空格,還要注意去掉列表最後一個列名的逗號。利用動態 SQL,可以徹底擺脫這種痛苦。
  • 技巧:MyBatis 中的trim標籤,好用!
    作者 | wt_better來源 | https://blog.csdn.net/wt_better/article/details/80992014mybatis的trim標籤一般用於去除sql語句中多餘的and關鍵字,逗號,或者給sql語句前拼接 「where「、「set「以及「values(「 等前綴,或者添加「)「等後綴,可用於選擇性插入、更新、刪除或者條件查詢等操作