Mybatis總結一:resultType ,resultMap
阿新 • • 發佈:2019-01-06
一 resultType
如果返回的只是物件,而不是物件的list
<sql id = "Base_Column">
p.id,
p.name,
p.age,
p.gender ,
</sql>
<select id="" resultType="類路徑" parameterType="xxx">
select <include refid="Base_Column">
from t_people as p
where id = #{id}
</select>
註解:這條sql語句。等價於
select
p.id,
p.name,
p.age,
p.gender ,
p.has_girl_friend as hasGirlFriend,
from t_people as p
where id = #{id}
注意:
1 <include .....>中的sql放在select語句中是一個完整的sql(當然你也可以直接將查詢的欄位放在 select 中),博主的意思是,如果你表用了別名,<include .../>不要忘記欄位前面加上 "別名.",不然報錯啦。
2 <include .../>最後一個欄位別多加 "," ,博主以前總是被坑(細心)
二 resultMap
如果返回的是一個實體類的list,就要用resultMap
<resultMap id="BaseMap" type="com.People">
<result column="id" property="id"/>
<result column="name" property="name">
<result column="has_girl_friend" property="hasGirlFriend">
</resultMap>
<select id="" parameterType="" resultMap="BaseMap">
select <include refid="">
from t_people
</select>
注意:
1 resultMap中的column 一定要和表字段一樣,property 要和實體類的屬性一樣,<include ..../裡面的欄位也要和實體類的屬性名一樣。。
2 不過是通過sql計算得到的還是直接查詢的欄位,實體類中一樣要有,因為他要將查到的資料對映到實體類中的欄位,不然控制檯就會報錯,初學者剛開始一定要弄清楚!
三 總結
1 實際開發中,很多錯是因為 沒有和實體類欄位對上,一定要和實體類屬性對上!
2 很多時候,程式碼裡丟擲NullPointException,有時候就是返回的物件或者list中,某些欄位為null,可以dubbg除錯。這種情況,就要好好查查你的sql了,欄位對應實體類的欄位。
3 如果你as了一個實體類中不存在的屬性,也會報錯。
總之,按照總結1 來,細心。
由於水平有限,排版不熟練,請多多指教!