查詢數據的時候,查不到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中已經配置的字段作映射。