resultMap使用的范围很广
当数据库的字段与我们的视图类的属性字段不一致时,就可以用resultMap来做转换
代码实例:
<resultMap id="BaseResultMap" type="city" autoMapping="true"><!--如果数据的字段和city字段一样,可以使用autoMapping自动映射-->
<result column="user_id" property="userId" jdbcType="INTEGER" />
<!-- <result column="name" property="name" jdbcType="VARCHAR" />
<result column="pid" property="pid" jdbcType="INTEGER" />-->
<collection property="pro" javaType="province"><!--这里是我们city中的属性 在collection中,我们的字段得一个个映射,这点比较麻烦,如果不映射,就查不出来-->
<result column="pid" property="id"/>
<result column="proname" property="name"/>
</collection>
</resultMap>
比如 数据库的字段为user_id 而 我们实体类的字段为userId,这样如果reusltType直接返回实体类类型
<select id="queryCityInfo" resultType="city">
是不能完成映射的
因为我们mybatis在做数据库字段转换的时候,会将字段以set方式存储,就如user_id 到xml文件映射到结果集中的时候就是 setUser_id,而我们实体类中的属性userId通过set
就为setUserId,所以这样就不能将数据存储的,这是就需要使用resultMap来做一个装换
就可以这样转换
<result column="user_id" property="userId" jdbcType="INTEGER" />
这样就不需要去修改我们的实体类
还有一种,就是复合集合使用map
上面就可以看到,我们用到了collection,是指我们的实体city类里面,还有一个province属性类的关联
package com.asiainfo.mybatis.pojo;
public class City {
private Integer id;
private String name;
private Province pro;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name == null ? null : name.trim();
}
public Province getPro() {
return pro;
}
public void setPro(Province pro) {
this.pro = pro;
}
}
我们需要同时查询出两者的信息
<select id="queryCityInfo" resultMap="BaseResultMap">
SELECT t.*,p.name as proname,p.id as pid FROM city t LEFT JOIN province p ON (t.id=p.id) LIMIT 5
</select>
这样就可以关联查询出来我们想要的结果