一、mybatis的参数映射不同于字段映射,参数映射中的“参数”是指传入sql语句中的参数,而字段映射是指将JDBC的结果集ResultSet数据映射成javaBean。
二、Mybatis的参数映射配置
1、Mybatis的参数映射利用的属性是 :parameterType。
parameterType,将会传入这条语句的参数的类全限定名或别名。这个属性是可选的,因为 MyBatis 可以通过类型处理器(TypeHandler)推断出具体传入语句的参数,默认值为未设置(unset)。
对于大多数的使用场景,都不需要复杂的参数,例如:
select * from people where id=#{id}
insert into people(name, age) values (#{name}, #{age})
2、Mybatis参数映射高级配置
#{property,javaType=int,jdbcType=NUMERIC}
三、Mybatis的字段映射配置
Mybatis中字段映射最强大的还是resultMap元素。它可以让我们从JDBC ResultSets的数据提取中解放出来。
例如下面的映射示例,其实并没有使用resultMap。
select id,name,age from people where id=#{id}
上述语句只是简单的将所有的列映射到HashMap的键上,这由resultType属性指定。虽然通常都够用,但是HashMap不是一个很好的领域模型。我们的程序更多的是使用javaBean或者POJO作为领域模型。Mybatis对两者都提供了支持。看看下面的javaBean:
packagecom.asiainfo.pojo;public classPeople {private intid;privateString name;private intage;public intgetId() {returnid;
}public void setId(intid) {this.id =id;
}publicString getName() {returnname;
}public voidsetName(String name) {this.name =name;
}public intgetAge() {returnage;
}public void setAge(intage) {this.age =age;
}
@OverridepublicString toString() {return "People [id=" + id + ", name=" + name + ", age=" + age + "]";
}
}
上面javaBean中的3个属性:id、name和age分别对应select语句中的列名。这样的javaBean映射到ResultSet,就行映射到HashMap一样简单。
select id,name,age from people where id=#{id}
这些情况Mybatis在幕后自动创建了一个ResultMap,基于属性名映射到列到javaBean上。如果列名和属性名没有精确匹配,可以在select语句中使用别名(这是基于SQL特性)来匹配标签,比如:
SELECT
user_id AS id,
user_name AS NAME,
user_age AS age
FROM
people
WHERE
id = #{id}
下面还有一种解决列名不匹配的方式
而在引用它的语句中使用resultMap属性就行了(注意我们去掉了resultType属性),比如:
SELECT
user_id,
user_name,
user_age
FROM
t_users
WHERE
id = #{id}