Mybatis 一对多 查询

一对多 与 一对一 查询有许多相似之处。
最主要的区别是 查询结果是list,与之对应的标签为collection.

班级和学生,一个班有多个学生,而每个学生只能属于一个班。
此时班级编号作为学生表的外码。

这里写图片描述
学生实体类:

public class Student {

    private int id;
    private String name;
    }

这时班级类修改为:

public class Classes {

    private int id;
    private String name;
    private Teacher teacher;

    **private List<Student> list**;
    }

根据班级编号,查询班级信息,以及此班所有学生的信息。
同样有两种方法:
第一种:

    <select id="getClass" parameterType="int" resultMap="getClassMap">
        SELECT * from class c,teacher t,student s WHERE  s.class_id=c.c_id and c.c_id=#{id}
    </select>
        <resultMap type="Classes" id="getClassMap">
        <id property="id" column="c_id"/>
        <result property="name" column="c_name"/>
        <collection property="list" ofType="Student">
            <id property="id" column="s_id"/>
            <result property="name" column="s_name"/>
        </collection>
    </resultMap>

第二种:

<select id="getClass2" resultMap="getClassMap2">
        SELECT * FROM class WHERE c_id=#{id}
    </select>

    <select id="getStudent" resultType="Student">
        SELECT s_id id, s_name name FROM student WHERE class_id=#{id}
    </select>

        <resultMap type="Classes" id="getClassMap2">
        <id property="id" column="c_id"/>
        <result property="name" column="c_name"/>   
        <collection property="list" column="c_id" select="getStudent"></collection>
    </resultMap>

测试类:

public class Test6 {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        SqlSessionFactory factory = MybatisUtil.getFactory();
        SqlSession session = factory.openSession();
        String statement="com.atguigu.mybatis.test6.classMapper.getClass";
        statement="com.atguigu.mybatis.test6.classMapper.getClass2";
        Classes classes = session.selectOne(statement , 1);
        System.out.println(classes);
    }

}

结果:
这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值