MyBatis的集合查询

集合(collection)元素用来处理“一对多”的关系,集合元素和联合非常相似,还是上一篇中的数据张三丰有武当七侠,王重阳有全真七子
来看第一种子查询方式:

<resultMap id="teacherResult" type="com.zengyg.myibatis.dto.TeacherInfo">
    <id property="teacherId" column="teacher_id" />
    <result property="name" column="name" />
    <result property="sex" column="sex" />
    <collection property="students" column="teacher_id" javaType="ArrayList"  ofType="com.zengyg.myibatis.dto.StudentInfo"
        select="querystudentByTeacherId" >
    </collection>
</resultMap>
<select id="querystudentByTeacherId" parameterType="int" resultType="com.zengyg.myibatis.dto.StudentInfo">
    select student_id as studentId ,name ,sex
    from student
    where teacher_id = #{teacher_id}
</select>

<select id="queryById" parameterType="int" resultMap="teacherResult">
    select teacher_id ,name ,sex
    from teacher
    where teacher_id = #{teacherId}
</select>

通过子查询querystudentByTeacherId查询学生的列表,这里新增了个“ofType”属性,这个属性用来区分JavaBean(或字段)属性类型和集合包含的类型来说是很重要的,这几javaType=”ArrayList” 表示JavaBean属性类型,ofType=”com.zengyg.myibatis.dto.StudentInfo” 表示ArrayList里面是StudentInfo,column也可以传入多个值,方式同联合,同样子查询也存在N+1的问题,在查询结果会集合时应该慎用
另外一种外链接的方式:

<resultMap id="teacherResultUseJoin" type="com.zengyg.myibatis.dto.TeacherInfo">
    <id property="teacherId" column="teacher_id" />
    <result property="name" column="name" />
    <result property="sex" column="sex" />
    <collection property="students" javaType="ArrayList"  ofType="com.zengyg.myibatis.dto.StudentInfo" >
        <id property="studentId" column="student_id" />
        <id property="sex" column="sex_s" />
        <id property="name" column="name_s" />
        <id property="teacherId" column="teacher_id" />
    </collection>
</resultMap>
<select id="queryTeacherByIdUseJoin" parameterType="int"
    resultMap="teacherResultUseJoin">
    select t.teacher_id ,t.name ,t.sex,student_id,s.name as name_s,s.sex as sex_s
    from teacher t left join student s on t.teacher_id = s.teacher_id
    where t.teacher_id = #{teacherId}
</select>

比较简单,不做过多解释
以上完整代码地址:https://git.oschina.net/zengyg/J2EEAPIStudy.git

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值