<!--column对应的是结果集的列名,不是原表的。property是对应实体的属性名。-->
<resultMap id="唯一的标识" type="映射的对象类型">
<id column="主表的主键列名" jdbcType="字段类型" property="映射对象的主键属性" />
<result column="主表的对应属性列名" jdbcType="字段类型" property="映射对象的属性"/>
<association property="主对象中存储关联对象的属性名" javaType="关联的实体对象类型">
<id column="关联表的主键对应的结果集中的列名" jdbcType="字段类型" property="关联对象的主键属性"/>
<result column="关联表的属性对应的结果集中的列名" jdbcType="字段类型" property="关联对象的属性"/>
</association>
</resultMap>
resultMap中一共有六种不同的节点
<resultMap>
<constructor>
<idArg/>
<arg/>
</constructor>
<id/>
<result/>
<association property=""/>
<collection property=""/>
<discriminator javaType="">
<case value=""></case>
</discriminator>
</resultMap>
collection
collection是用来解决一对多级联的
比如 每个省份下面都会有很多城市,如下:
这里写图片描述
现在Province实体类中多了一个属性叫做cities,
这个cities属性的数据类型是一个List集合,这个集合中放的所有的数据就是这个省份的
创建Province实体类
public class Province {
private Long id;
private String name;
private Alias alias;
private List<City> cities;
//省略getter/setter
}
创建City实体类
public class City {
private Long id;
private Long pid;
private String name;
//省略getter/setter
}
创建CityMapper
public interface CityMapper {
List<City> findCityByPid(Long id);
}
创建cityMapper.xml
<resultMap id="provinceResultMapper" type="org.sang.bean.Province">
<id column="id" property="id"/>
<result property="studentName" column="Name"/>
<collection property="cities" column="id" select="org.sang.db.CityMapper.findCityByPid"/>
</resultMap>
<select id="getProvince" resultMap="provinceResultMapper">
SELECT * FROM province
</select>
<select id="findCityByPid" parameterType="long" resultType="org.sang.bean.City">
SELECT * FROM city WHERE pid=#{id}
</select>