91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Mybatis中resultType與resultMap之間的關系和使用場景

發布時間:2021-07-02 17:50:40 來源:億速云 閱讀:208 作者:chen 欄目:大數據

本篇內容介紹了“Mybatis中resultType與resultMap之間的關系和使用場景”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

1.概要

Mybatis ORM半自動映射框架對java開發工程師來說應該是必會的框架之一。它的好處這里不是我們討論的重點。令很多剛剛入行的java開發小伙伴迷茫的是 resultTyperesultMap的使用。今天來探討一下這個問題。

2.resultType與resultMap

接下來我們就來講一下Mybatis中resultType與resultMap之間的關系和使用場景。

2.1 resultType

select語句中返回的期望類型的類的完全限定名或別名。 注意如果返回的是集合,那應該設置為集合包含的類型,而不是集合本身。可以使用 resultType 或 resultMap,但不能同時使用。

2.2 resultMap

從這條語句中返回的期望類型的類的完全限定名或別名。 注意如果返回的是集合,那應該設置為集合包含的類型,而不是集合本身。可以使用 resultType 或 resultMap,但不能同時使用。

2.3 共同點

resultTyperesultMap首先都是用來歸納查詢類型sql的結果集,對查詢結果進行你需要的結構描述。對于同一個select標簽中二者不能共存。這一點對很多人來說很好理解。重要的是不同點和對應的使用場景。

2.4 二者分別的使用場景

對于查詢結構需要返回的簡單pojo,結果都可以映射到一致的hashMap上,換句話來說就是數據庫列名可以精確匹配到pojo屬性的。一般都用resultType。其實這里有一個隱含的構建機制。映射到resultType的結果都是MyBatis在幕后自動創建了一個resultMap來處理的。簡而言之,只要resultType能干的事情resultMap都能干。二者定位是:

  • resultType用來處理非常簡單的結果集,就是列名能夠與pojo屬性匹配的的結果集。如果你只需要查詢一個班級的簡單情況,那么用這個再合適不過了。

 @Data
 public class Grade{
   private String gradeId
   private String gradeName;
   private Integer studentCount;
 }

我們很簡單就可以使用下列操作:

<select id="selectGrades" resulttype="com.someapp.model.Grade">
  select gradeId,gradeName, studentCount
  from grade
  where gradeId = #{gradeId}
</select>

當然你也可以如上述所說使用resultMap

<resultmap id="GradeResultMap" type="com.someapp.entity.Grade">
  <id property="gradeId" column="grade_id" />
  <result property="gradeName" column="grade_name" />
  <result property="studentCount" column="student_count" />
</resultmap>

然后將上面的resultType轉換為resultMap即可,請注意我上面兩種需要處理字段的駝峰風格,當然你可以設置Mybatis是否使用駝峰來進行規避。

  • resultMap更擅長來處理復雜映射的結果集。比如一對一、一對多的復雜關系。如果你不但要查詢一個班級的情況,附帶需要查詢班級所在的學校,班級學生的詳細情況,甚至是班級男女學生概況。就必須使用resultMap來描述這些映射關系了。這個例子我們來寫一下:

我們定義一個對上面關系描述的DTO:

 @Data
 public class GradeDTO {
    private String gradeId
    private String gradeName;
    private Integer studentCount;
    private School school;
    private List<teacher> teachers
    private List<boystudent> boyStudents;  
    private List<girlstudent> girlStudents;
    
 }

對應的映射處理:

<resultmap id="ComplexResultMap" type="GradeDTO">
       <!--   班級情況   -->
      <id property="gradeId" column="grade_id" />
      <result property="gradeName" column="grade_name" />
      <result property="studentCount" column="student_count" />
       <!--   班級對應的學校   -->
      <association property="school" javatype="School">
          <id property="schoolId" column="school_id" />
          <result property="schoolName" column="school_name" />
      </association>
       <!--   班級的老師們   -->
      <collection property="teachers" oftype="Teacher">
          <id property="teacherId" column="teacher_id" />
          <result property="teacherName" column="teacher_name" />
      </collection>
      <!--   根據性別來區分男女學生  注意這里的語法未經過驗證 有興趣可找文檔學習   -->
      <discriminator javatype="int" column="gender">
          <case value="0" resultType="GirlStudent" />
          <case value="1" resultType="BoyStudent" />
      </discriminator>
  </resultmap>

當然resultMap還可以像java類一樣繼承。總之,只要你想,這玩意兒你可以玩出花來。但是注意性能問題,盡量不要過多的嵌套。盡量配置延遲加載lazyLoadingEnabled以達到按需加載。

3.總結

本文主要通過簡單分析resultTyperesultMap的相同點與不同點來闡明它們各自的使用場景。更多詳盡的使用方法可以去Mybatis的官方文檔查看。希望通過本文的講解讓你在實際開發工作中不再困惑更加明了。

“Mybatis中resultType與resultMap之間的關系和使用場景”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

万载县| 侯马市| 开封市| 邹城市| 遵化市| 突泉县| 南和县| 白城市| 东山县| 木里| 彰化市| 揭东县| 南通市| 湟中县| 锡林浩特市| 云南省| 南投县| 崇礼县| 上高县| 米易县| 龙胜| 隆尧县| 集贤县| 天全县| 聂拉木县| 京山县| 原阳县| 海阳市| 泗水县| 枝江市| 寿阳县| 金塔县| 遂宁市| 汕尾市| 湘乡市| 北京市| 湛江市| 武义县| 清涧县| 江西省| 永年县|