Mybatis框架之解決列名(表中的字段名稱)和實體類中的屬性名不一致

查詢數據的時候,查不到userName的信息,原因:數據庫的字段名是user_name,而POJO中的屬性名字是userName
兩端不一致,造成mybatis無法填充對應的字段信息。修改方法:在sql語句中使用別名
解決方案1:在sql語句中使用別名
解決方案2:參考駝峯匹配 — mybatis-config.xml 的時候



解決方案3:resultMap自定義映射
示例:
步驟一:將駝峯匹配註釋掉
一旦註釋掉駝峯匹配,那麼再通過queryUserById查詢的結果中,用戶名就無法封裝了,此時我們可以嘗試使用ResultMap來解決這個問題。

在這裏插入圖片描述步驟二:在UserMapper.xml中配置resultMap

<resultMap type="User" id="userResultMap" autoMapping="true">
	<!-- id標籤:配置主鍵映射,column:表中的字段名稱,property:屬性名稱 -->
	<id column="id" property="id"/>
	<!-- 可以用來配置普通類型字段和屬性映射(非複雜類型) -->
	<result column="user_name" property="userName"/>
</resultMap>
步驟三:在statement中引用自定義resultMap
<!-- 
	select:查詢的statement,用來編寫查詢語句。
	id:語句的唯一標識,使用動態代理之後,必須和mapper接口中的方法名稱一致。
	resultType:配置返回的結果集類型
	parameterType:參數類型,可以省略。
 -->
select * from tb_user where id = #{id} 測試無誤 注意:測試完記得將駝峯命名的配置重新開啓,因爲其他的測試方法還要用。 **resultMap的自動映射** 在上面講到的resultMap中,主鍵需要通過id子標籤配置,表字段和屬性名不一致的普通字段需要通過result子標籤配置。 那麼,字段和屬性名稱都匹配的字段要不要配置?

這個取決於resultMap中的autoMapping屬性的值:
爲true時:resultMap中的沒有配置的字段會自動對應。如果不配置,則默認爲true。
爲false時:只針對resultMap中已經配置的字段作映射。

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