resultMap結果集映射解決屬性名和欄位不一致問題

解決屬性名和欄位名不一致的問題

1.出現的問題

資料庫中的欄位

image-20210417163434479

新建一個項目,拷貝之前的,測試實體類與資料庫欄位不一致的情況

public class User {
    private int id;
    private String name;
    private String password;
}

現在測試出現問題

image-20210417164131036

image-20210417164259835

image-20210417164356837

解決方法:

方法一:最簡單的在sql語句中直接起別名

<select id="getUserById" resultType="user">
    select id,name,pwd as password from mybatis.user where id = #{id}
</select>

方法二就是使用下面的resultMap

2、resultMap

結果集映射

首先定義一個resultMap的標籤做資料庫欄位與實體類屬性的映射(註:可以只映射不相同的欄位與屬性)

<!--resultMap叫結果集映射,
    就是實現將sql查詢出來的結果集映射到實體類里-->
<resultMap id="UserMap" type="User">
    <!--column資料庫的欄位,property實體類中的屬性-->
    <!--resultMap可以什麼哪個欄位不一樣轉哪個欄位,
        並不用資料庫列和實體類屬性全部寫完-->
    <!-- <result column="id" property="id"/>
        <result column="name" property="name"/>-->
    <result column="pwd" property="password"/>
</resultMap>

然後select標籤取引用它,如下:

<select id="getUserById" resultMap="UserMap">
    select * from mybatis.user where id = #{id}
</select>

這就是結果集映射的用法。

下面時截取的Mybatis官網上的一些針對resultMap的重要資訊:

  • resultMap 元素是 MyBatis 中最重要最強大的元素。
  • ResultMap 的設計思想是,對簡單的語句做到零配置,對於複雜一點的語句,只需要描述語句之間的關係就行了。
  • 相同的欄位和屬性名不用做映射也可。
  • 如果這個世界總是這麼簡單就好了。(哈哈哈哈)

這篇文章的源碼在Mybatis-study工程的mybatis-03模組下!,後面會給出碼雲地址。

Tags: