Mybatis參數映射和字段映射


一、mybatis的參數映射不同於字段映射,參數映射中的“參數”是指傳入sql語句中的參數,而字段映射是指將JDBC的結果集ResultSet數據映射成javaBean。

二、Mybatis的參數映射配置

1、Mybatis的參數映射利用的屬性是 :parameterType。

parameterType,將會傳入這條語句的參數的類全限定名或別名。這個屬性是可選的,因為 MyBatis 可以通過類型處理器(TypeHandler)推斷出具體傳入語句的參數,默認值為未設置(unset)。

對於大多數的使用場景,都不需要復雜的參數,例如:

<select id="selectPeopleById" resultType="people">
    select * from people where id=#{id}
</select>
<insert id="insert" parameterType="people">
    insert into people(name, age) values (#{name}, #{age})
</insert>

2、Mybatis參數映射高級配置

#{property,javaType=int,jdbcType=NUMERIC}

三、Mybatis的字段映射配置

Mybatis中字段映射最強大的還是resultMap元素。它可以讓我們從JDBC ResultSets的數據提取中解放出來。

例如下面的映射示例,其實並沒有使用resultMap。

<select id="selectMapById" resultType="map">
    select id,name,age from people where id=#{id}
</select>

上述語句只是簡單的將所有的列映射到HashMap的鍵上,這由resultType屬性指定。雖然通常都夠用,但是HashMap不是一個很好的領域模型。我們的程序更多的是使用javaBean或者POJO作為領域模型。Mybatis對兩者都提供了支持。看看下面的javaBean:

package com.asiainfo.pojo;

public class People {
    private int id;
    private String name;
    private int age;
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    @Override
    public String toString() {
        return "People [id=" + id + ", name=" + name + ", age=" + age + "]";
    }
}

上面javaBean中的3個屬性:id、name和age分別對應select語句中的列名。這樣的javaBean映射到ResultSet,就行映射到HashMap一樣簡單。

<select id="selectAll" resultType="com.asiainfo.pojo.People">
    select id,name,age from people where id=#{id}
</select

這些情況Mybatis在幕后自動創建了一個ResultMap,基於屬性名映射到列到javaBean上。如果列名和屬性名沒有精確匹配,可以在select語句中使用別名(這是基於SQL特性)來匹配標簽,比如:

<select id="selectAll" resultType="com.asiainfo.pojo.People">
    SELECT
        user_id AS id,
        user_name AS NAME,
        user_age AS age
    FROM
        people
    WHERE
        id = #{id}
</select>

下面還有一種解決列名不匹配的方式

<resultMap id="peopleResultMap" type="people">
    <id property="id" column="user_id" />
    <result property="name" column="user_name"/>
    <result property="age" column="user_age"/>
</resultMap>

而在引用它的語句中使用resultMap屬性就行了(注意我們去掉了resultType屬性),比如:

<select id="selectPeoples" resultMap="peopleResultMap">
    SELECT
        user_id,
        user_name,
        user_age
    FROM
        t_users
    WHERE
        id = #{id}
</select>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM