1. 程式人生 > 其它 >MyBatis_屬性名和欄位名不一致

MyBatis_屬性名和欄位名不一致

技術標籤: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}

解決方法:

  • 一、起別名(更改的是:sql語句)

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,是解決列名不匹配的另外一種方式。

    <!--結果集對映-->
    <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>

官方文件_結果對映