一、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>