中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

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

拉萨市| 新绛县| 察哈| 承德县| 高碑店市| 忻州市| 西畴县| 新泰市| 阳信县| 枝江市| 鹤山市| 兴安县| 五大连池市| 海晏县| 南平市| 田阳县| 西乌| 涞水县| 张家港市| 桓台县| 泉州市| 宾阳县| 旌德县| 郯城县| 宜兴市| 伊春市| 修水县| 龙南县| 交口县| 木里| 措美县| 东源县| 东阳市| 吉木乃县| 岚皋县| 许昌市| 太保市| 鲁甸县| 海宁市| 荔波县| 尼勒克县|