在使用MyBatis的使用,應該注意實體類的屬性名儘量和表的字段名儘量相同,如果不同將會導致MyBatis無法完成數據的封裝,但是在軟件開發過程中,數據庫的創建和軟件環境的搭建不可能是同一個人,實體類屬性名和數據庫的字段名不同那就在所難免,那麼我們現在提供三種解決方案解決這個問題
1) 給數據字段起別名
爲查詢語句的顯示列定義別名,讓這個別名與實體類的屬性名相同完成自動封裝
缺點: 1.如果列數過多會導致語句難以閱讀
2.如果查詢語句的定義多個,會導致重複代碼增多,多次定義顯示列增加了工作量
<selectid="selectStudentAll2" resultType="Student">
select id stuId,name stuName,agestuAge from student
</select>
2)使用esultMap 手動配置一個數據結果的封裝規則
<!--
resultMap 手動配置一個數據結果的封裝規則
屬性
type 用於指定將數據的返回結果封裝到哪個實體類中
id 這個封裝規則的唯一標識,用於被查詢標籤中的resultMap所引用
-->
<resultMaptype="Student" id="stuMap">
<!-- 用於專門封裝主鍵的將column指定的id列設置到property指定stuId屬性中這個屬性來自於 resultMap中type屬性指定的Student類 -->
<idcolumn="id" property="stuId"/>
<!--基本屬性封裝 將column指定的name列設置到property指定stuName屬性中這個屬性來自於resultMap中type屬性指定的Student類-->
<resultcolumn="name" property="stuName"/>
<resultcolumn="age" property="stuAge"/>
</resultMap>
<!--
屬性
resultMap 用於指定某個自定義的封裝規則,MyBatis會根據這個自定義的封裝規則進行數據封裝(單條記錄)
優點:1.這個自定義的封裝規則可以被重複使用,省去多次定義別名的問題
缺點:1.需要額外定義一套封裝規則的resultMap
-->
<selectid="selectStudentAll3" resultMap="stuMap">
select* from student
</select>
3)使用resultType屬性並指定返回結果爲一個map集合
<!--
使用resultType屬性並指定返回結果爲一個map集合
這時MyBatis會將顯示列作爲Map即可key顯示列對應的值爲Map集合的value,將每條記錄封裝到不同的Map集合中,最後將Map集合添加到List集中進行返回每一個Map集合對應着一條記錄
優點:簡單方便快捷
缺點:破壞了ORM的映射關係
-->
<selectid="selectStudentAll" resultType="map">
select* from student
</select>