在MyBatis的映射中有column這麼一個屬性,我一直以為它映射的是資料庫表中的列名,但經過學習發現他似乎映射的是SQL語句中的列名,或者說是查詢結果所得到的表的列名。 下麵我們進行一個實驗。 首先我們有一張user表: 我還有一個實體類User,有著id、username、password三個 ...
在MyBatis的映射中有column這麼一個屬性,我一直以為它映射的是資料庫表中的列名,但經過學習發現他似乎映射的是SQL語句中的列名,或者說是查詢結果所得到的表的列名。
下麵我們進行一個實驗。
首先我們有一張user表:
我還有一個實體類User,有著id、username、password三個屬性。
我們的UserMapper介面中有著獲取這張表單所有數據的方法。
我們現在在UserMapper.mxl中這樣寫:
<select id="getUsers" resultType="User"> select * from mybaties.user </select>
或者這樣寫:
<select id="getUsers" resultType="User"> select id, username, password from mybaties.user </select>
這兩句完全相同,我們去測試一下看看結果:
成功獲取了所有信息。
現在給password起個別名pwd,在UserMapper.mxl中這樣寫:
<select id="getUsers" resultType="User"> select id, username, password as pwd from mybaties.user </select>
此時我們再去運行:
我們會發現password竟然變成了null。
此時我們去配置一個結果映射,讓pwd映射到我們的屬性password:
<resultMap id="um" type="User"> <result property="password" column="pwd"/> </resultMap> <select id="getUsers" resultMap="um"> select id, username, password as pwd from mybaties.user </select>
測試結果:
沒有問題。
得出結論:映射到屬性的欄位名是查詢結果的列名,而不是資料庫中已存在的表的列名。