Mybatis確實非常的方便,使用起來也十分的舒服,但是在使用的時候難免就會遇到一些問題,比如Java中的實體類字段名和數據庫表中的字段不一致時,執行結果就會出現意外。
有如下兩種類型:
1.數據庫字段名和實體類字段名存在一定關係
數據庫字段和實體類字段有對應關係,這裏的對應關係就是數據庫字段全爲大寫字母且單詞之間用_
分隔,實體類的屬性名採用小駝峯式命名,一定要保證對應,例如數據庫中的USER_ID
對應實體類中的·userId
字段。
類似於如下:
這種不對應的情況,Mybatis提供了一個自動駝峯命名規則的設置,但是默認是關閉的,所以當我們沒有設置的時候,這樣也是對應不上的。我們就需要在Mybatis的配置文件中添加如下配置:
<settings>
<!-- 開啓自動駝峯命名規則映射 -->
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
這裏需要注意的就是settings標籤
的位置了,需要按照以下順序排列,具體可參考博主的另一篇文章
當我們開啓了自動駝峯命名規則之後,這種情況就會得以解決。
2.數據庫字段名與實體類字段名“毫無關聯”
這裏的毫無關聯是指字段名字不對應,而且也不存在上面的第一種情況。這種情況下,我們開啓自動駝峯命名規則就不起任何作用了。
對於這種情況我們有兩種解決方案:
2.1 在編寫SQL語句的時候爲字段起別名
舉例如下:
<select id="getUserList" resultType="User">
select USER_ID as id,USER_NAME as name,USER_PASSWORD as password from user2;
</select>
但是這種解決方式還是有些不妥,萬一我們的數據庫字段很多,我們編寫的sql就會很長,看起來就十分的冗餘,於是Mybatis也有一種解決方案。
2.2 ResultMap結果集映射
舉例如下:
<!-- 自定義一個結果集映射 -->
<!-- id:區分該自定義結果集的唯一指定id -->
<!-- type:指定需要映射的JavaBean類型 -->
<resultMap id="userMap" type="User">
<!-- 這裏的id標籤標示它是主鍵 -->
<!-- column:數據庫表中的字段名 -->
<!-- property:指定JavaBean中的屬性 -->
<id column="USER_ID" property="id" />
<!-- 這裏的result標籤標示它是普通字段,其屬性值與上述一致 -->
<result column="USER_NAME" property="name" />
<result column="USER_PASSWORD" property="password" />
</resultMap>
<!-- 由於我們自定義了結果集的映射,所以我們這裏需要使用resultMap來指定結果集應該按照我們自定義的結果集來產生映射行爲 -->
<select id="getUserList" resultMap="userMap">
select USER_ID,USER_NAME,USER_PASSWORD from user2;
</select>
當我們這樣設置之後,問題也會得到對應的解決。
博主更推薦使用這種結果集映射的方式來處理數據庫字段與實體類字段不一致的情況。