Mybatis中resultMap的Colum和property屬性詳解

resultMap的Colum和property屬性

1: resultMap標簽

當我們的數據庫字段與實體類的屬性不一致時,就需要使用該標簽進行一一映射。

2:使用情況

2.1 簡單查詢

 <resultMap id="這個resultMap的id" type="對應實體類的全限定類名">
         <id column="id" property="id"></id>
        <result column="username" property="name"></result>
        <result column="author" property="author"></result>
        <result column="number" property="number"></result>
       .............
       colum對應數據庫的字段,property對應實體類的屬性
    </resultMap>

他表示對數據按照什麼樣的規則進行一一映射,如:

  <!-- 根據編號查找書籍-->
    <select id="SelectbooksByNumber" parameterType="String"  resultMap="名字">
        select * from book where number=#{number};
    </select>

上面的查找結果按照你給的resultMap的對應規則進行映射。

2.2 一對一

需要註意的是你sql語句查出來的列名稱是別名,那你就要填別名,就不是你數據庫的列名稱瞭。

返回結果:User
User中含有Role屬性集合 一對多的關系
JavaType是用來指定pojo中屬性的類型

2.3 一對多

同樣和一對一 一樣需要註意列名稱。

返回結果:User
User中含有Role屬性集合 一對多的關系
JavaType是用來指定pojo中屬性的類型,
ofType指定的是 映射到list集合屬性中pojo的類型
其中Role屬性集合為List

pojo

public class User implements Serializable {
    private Integer id;
    private String username;
    private String password;
    private String salt;
    private Integer status; // 用戶狀態 0: 正常   1:禁用   2:鎖定

    //角色集合
    private List<Role> roles;

role表

在這裡插入圖片描述

user表

在這裡插入圖片描述

user與role的映射表

在這裡插入圖片描述

resultMap對column和property的理解

首先,先看看這張圖,看能不能一下看明白:

select元素有很多屬性(這裡說用的比較多的)

  • id:命名空間唯一標識,可以被用來引用這條語句
  • parameterType:將會傳入這條語句的參數類的完全限定名或者別名
  • resultType:從這條語句要返回的期望類型的類的完全限定名或別名(這裡註意下集合類型,應該是集合可以包含的類型,不能是集合本身),重要:使用resultType或resultMap,但不能同時使用。
  • resultMap:命名引用外部的resultMap,其名稱要和外部的resultMap元素的ID名稱一致,用於映射其結果到實體類指定對象中。

什麼時候我們知道使用resultMap,什麼時候又使用resultType呢?

①當去select一張表時,可以使用resultType,這些情況下,MyBatis會在幕後自動創建一個ReusltMap,基於屬性名來映射到JavaBean屬性上

②所以在使用resultMap時,就必須要寫上resultMap相對應的xml

③為瞭方便我們開發出錯,在沒有特別要求的情況下,column名可以完全和property名稱一致,否則當我們沒有對應上的時候,數據庫匹配不到,會將某某參數值變為大寫,導致我們本來獲取小寫的參數名,結果沒有獲取到,後臺報錯,得不償失啊!

最後說下

sql中比如,有 andm.id = #{id ,jdbcType=VARCHAR } 要標明jdbcType為什麼呢?

解釋:

如果你映射瞭一個javabean,MyBatis通常可以斷定類型(項目裡好多都要寫,我也不知道為啥),然而,如果你映射到的是比如:HashMap,那麼應該明確指定的jdbcType來保證所需的行為

以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。

推薦閱讀: