Mybatis中resultMap的Colum和property屬性詳解
resultMap的Colum和property屬性
1: resultMap標(biāo)簽
當(dāng)我們的數(shù)據(jù)庫字段與實體類的屬性不一致時,就需要使用該標(biāo)簽進行一一映射。
2:使用情況
2.1 簡單查詢
<resultMap id="這個resultMap的id" type="對應(yīng)實體類的全限定類名"> <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對應(yīng)數(shù)據(jù)庫的字段,property對應(yīng)實體類的屬性 </resultMap>
他表示對數(shù)據(jù)按照什么樣的規(guī)則進行一一映射,如:
<!-- 根據(jù)編號查找書籍--> <select id="SelectbooksByNumber" parameterType="String" resultMap="名字"> select * from book where number=#{number}; </select>
上面的查找結(jié)果按照你給的resultMap的對應(yīng)規(guī)則進行映射。
2.2 一對一
需要注意的是你sql語句查出來的列名稱是別名,那你就要填別名,就不是你數(shù)據(jù)庫的列名稱了。
返回結(jié)果:User
User中含有Role屬性集合 一對多的關(guān)系
JavaType是用來指定pojo中屬性的類型
2.3 一對多
同樣和一對一 一樣需要注意列名稱。
返回結(jié)果:User
User中含有Role屬性集合 一對多的關(guān)系
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; // 用戶狀態(tài) 0: 正常 1:禁用 2:鎖定 //角色集合 private List<Role> roles;
role表
user表
user與role的映射表
resultMap對column和property的理解
首先,先看看這張圖,看能不能一下看明白:
select元素有很多屬性(這里說用的比較多的)
id
:命名空間唯一標(biāo)識,可以被用來引用這條語句parameterType
:將會傳入這條語句的參數(shù)類的完全限定名或者別名resultType
:從這條語句要返回的期望類型的類的完全限定名或別名(這里注意下集合類型,應(yīng)該是集合可以包含的類型,不能是集合本身),重要:使用resultType或resultMap,但不能同時使用。resultMap
:命名引用外部的resultMap,其名稱要和外部的resultMap元素的ID名稱一致,用于映射其結(jié)果到實體類指定對象中。
什么時候我們知道使用resultMap,什么時候又使用resultType呢?
①當(dāng)去select一張表時,可以使用resultType,這些情況下,MyBatis會在幕后自動創(chuàng)建一個ReusltMap,基于屬性名來映射到JavaBean屬性上
②所以在使用resultMap時,就必須要寫上resultMap相對應(yīng)的xml
③為了方便我們開發(fā)出錯,在沒有特別要求的情況下,column名可以完全和property名稱一致,否則當(dāng)我們沒有對應(yīng)上的時候,數(shù)據(jù)庫匹配不到,會將某某參數(shù)值變?yōu)榇髮?,?dǎo)致我們本來獲取小寫的參數(shù)名,結(jié)果沒有獲取到,后臺報錯,得不償失??!
最后說下
sql中比如,有 andm.id = #{id ,jdbcType=VARCHAR } 要標(biāo)明jdbcType為什么呢?
解釋:
如果你映射了一個javabean,MyBatis通??梢詳喽愋停椖坷锖枚喽家獙?,我也不知道為啥),然而,如果你映射到的是比如:HashMap,那么應(yīng)該明確指定的jdbcType來保證所需的行為
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
詳解Maven項目Dependencies常見報錯及解決方案
這篇文章主要介紹了詳解Maven項目Dependencies常見報錯及解決方案,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11SpringBoot @FixMethodOrder 如何調(diào)整單元測試順序
這篇文章主要介紹了SpringBoot @FixMethodOrder 調(diào)整單元測試順序方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-09-09Java實現(xiàn)簡易學(xué)籍管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了Java實現(xiàn)簡易學(xué)籍管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-02-02解決MyEclipse中Maven設(shè)置jdk版本jdk1.8報錯問題
今天安裝了jdk1.8、tomcat8、和maven3.5.2,弄好后在myeclipse新建了一個maven項目,項目默認(rèn)是jdk1.5,改成jdk1.8后項目報錯2018-10-10