1. resultMap元素
<!--column不做限制,可以为任意表的字段,而property须为type 定义的pojo属性-->
<resultMap id="唯一的标识" type="映射的pojo1对象" extends="继承其他resultMap">
<id column="表的主键字段" jdbcType="字段类型" property="映射pojo1对象的主键属性" />
<result column="表的一个字段" jdbcType="字段类型" property="映射到pojo1对象的一个属性"/>
<!-- association用于一对一关联 -->
<association property="pojo1的一个对象属性" javaType="pojo1关联的pojo2对象">
<id column="表的主键字段" jdbcType="字段类型" property="关联pojo2对象的主属性"/>
<result column="任意表的字段" jdbcType="字段类型" property="关联pojo2对象的属性"/>
</association>
<!-- collection用于一对多关联 -->
<collection property="pojo1的集合属性" ofType="集合中的pojo3对象">
<id column="表的主键字段" jdbcType="字段类型" property="集合中pojo3对象的主键属性" />
<result column="任意表的字段" jdbcType="字段类型" property="集合中的pojo3对象的属性" />
</collection>
</resultMap>
2. association元素
属性 | 描述 |
---|---|
property | 指定映射到的实体对象属性,与表字段一 一对应 |
column | 指定表中对应的字段 |
columnPrefix | 给列名指定前缀 |
javaType | 指定映射到实体对象的类型 |
resultMap | 指定结果集映射 |
select | 指定引入嵌套查询的子SQL语句,该属性用于关联映射中的嵌套查询 |
fetchType | 指定在关联查询时是否启用延迟加载。属性值lazy、eager,默认:lazy延迟加载,eager立即加载 |
<!-- 方式一:嵌套查询 -->
<!-- 这里相当于将column字段数据作为参数,传入到select指定的sql语句中查询到相关联的数据 -->
<!-- 当查询到大量数据时,每条数据都会发送一条sql语句,去查询它的关联数据,这里会发送大量sql
所以不建议使用这里的 嵌套查询 方式,可以使用下面的 嵌套结果 方式关联 -->
<association property="关联对象的引用名" column="关联字段(相当于外键)"
javaType="关联对象的类型"
select="命名空间.唯一标识"/>
<!-- 方式二:嵌套结果 -->
<association property="关联对象的引用名" javaType="关联对象的类型">
<id column="表的主键字段" jdbcType="字段类型" property="关联对象的属性"/>
<result column="任意表的字段" jdbcType="字段类型" property="关联对象的属性"/>
</association>
注: 这里的也可以使用resultMap指定映射结果集,替换javaType。
3. collection元素
collection的属性与association的属性基本相同,另外包含ofType属性。ofType用于指定关联表对应的实体类,也是就是一对多中集合类所包含的元素类型。
<!-- 方式一:嵌套查询 -->
<!-- 同以上原因,不建议使用 -->
<collection property="java集合对象引用名" column="表字段名"
ofType="集合对象所包含java类型"
select="命名空间.唯一标识"/>
<!-- 方式二:嵌套结果 -->
<collection property="java集合对象引用名" ofType="集合对象所包含java类型">
<id column="表的主键字段" jdbcType="字段类型" property="java类的属性名" />
<result column="任意表的字段" jdbcType="字段类型" property="java类的属性名" />
</collection>
注: 这里的也可以使用resultMap指定映射结果集,替换ofType。