MyBatis_屬性名和欄位名不一致
阿新 • • 發佈:2021-02-06
技術標籤:MyBatis學習隨筆
屬性名和欄位名不一致引發查詢結果有空的問題
表中的欄位名:
對應的JavaBean實體類
public class User {
private int id;
private String name;
private String password;
}
密碼的欄位是不一致的
最後測試,返回的User物件的password屬性是空的
原因:列名不匹配
select * from mybatis.user where id = #{id}
--型別處理器
select id,name,pwd from mybatis.user where id = #{id}
解決方法:
MyBatis 會在幕後自動建立一個 ResultMap,再根據屬性名來對映列到 JavaBean 的屬性上。如果列名和屬性名不能匹配上,可以在 SELECT 語句中設定列別名(這是一個基本的 SQL 特性)來完成匹配。
<select id="getUserById" parameterType="int" resultType="User">
select id,name,pwd as password from mybatis.user where id = #{id}
</ select>
上面沒有一個需要顯式配置 ResultMap,完全可以不用顯式地配置它們。
顯式使用外部的 resultMap,是解決列名不匹配的另外一種方式。
<!--結果集對映-->
<resultMap id="UserMap" type="User">
<!--column資料庫中的欄位,property實體類中的屬性-->
<result column="id" property=" id"></result>
<result column="name" property="name"></result>
<result column="pwd" property="password"></result>
</resultMap>
在引用它的語句中設定 resultMap 屬性就行了(注意去掉了 resultType 屬性)。
<select id="getUserById" resultMap="UserMap">
select id,name,pwd from mybatis.user where id = #{id}
</select>