MyBatis實體類屬性名與數據庫字段名不同的解決方案

在使用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屬性中這個屬性來自於 resultMaptype屬性指定的Student -->

                   <idcolumn="id" property="stuId"/>

                  <!--基本屬性封裝  column指定的name設置到property指定stuName屬性中這個屬性來自於resultMaptype屬性指定的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>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章