问题:之前接触过Ibatis的使用,在做一对多的时候,一般都是手动去填充,非自动让ibatis去填充数据。

下面就用ibatis的自动填充功能来实现。 关键使用到collection 标签下的select标签。 现在有活动表,讨论表   一个活动对应多条讨论,一条讨论属于一个活动 其中活动表中的activityId与讨论表中的activityId对应,怎么用ibatis查询一条活动的时候,同时将讨论表的数据装进domain中   ActivitysWithBLOBs.java 

1 privateInteger activityid;
2 privateList<Discuss> discusslist;//一对多

Discuss.java  

1 privateInteger id;
2 privateInteger activityid;
3 privateInteger userid;
4 privateString time;
5 privateString content;

mapper.xml中的配置如下

1 <resultMaptype="com.travel.model.ActivitysWithBLOBs"id="discussActyWithBLOBs"extends="ResultMapWithBLOBs">
2 <collectionproperty="discusslist"column="activityId"javaType="ArrayList"ofType="com.travel.model.Discuss"select="getDiscussByActId"/>
3 </resultMap>
4 <selectid="getDiscussByActId"resultType="com.travel.model.Discuss"parameterType="java.lang.Integer">
5 <![CDATA[
6 SELECT
7 discuss.id,
8 discuss.content,
9 discuss.time,
10 discuss.userId,
11 discuss.activityid
12 FROM
13 discuss
14 WHERE
15 discuss.activityId = #{activityId}
16 ]]>
17 </select>

注意:

  1. collection中的column="activityId"作为select="getDiscussByActId"的参数,在getDiscussByActId中使用为#{activityId}
  2. collection中javaType="ArrayList"或者是javaType="list" 可以不用配置,ofType="com.travel.model.Discuss"必须配置,并且为oftype
  3. select中resultType="com.travel.model.Discuss"parameterType="java.lang.Integer"


作者:少帅

您的支持是对博主最大的鼓励,感谢您的认真阅读。

本文版权归作者所有,欢迎转载,但请保留该声明。