需求中一对多实现的三种方式,其中使用collection/association

需求中一对多实现的三种方式

其中两种分别使用association,collection



准备库表字段

学生表/老师表(一个老师对应多个学生)

在这里插入图片描述
在这里插入图片描述

内部类

在这里插入图片描述


一、常见方法

分别查出教师和学生信息,后add整合

    @RequestMapping("/aaaa")
    public TeacherVo aaa(){

        TeacherVo teacherVo=aaaMapper.getTeacherVo(1);
        List<TeacherVo.Student> students= aaaMapper.getStudentVo(teacherVo.getTeacherId());
        teacherVo.setStudents(students);

        return teacherAndStudent;
    }


二、使用collection

使用关联查询,利用resultMap中的<collection>标签实现对字段的映射

TeacherVo teacherAndStudent = modelSuperviseRulesService.getTeacherAndStudent(1);
 <resultMap id="studentMap" type="com.sz.entity.vo.TeacherVo">
        <collection property="students"  javaType="ArrayList" ofType="com.sz.entity.vo.TeacherVo$Student" column="teacherId" select="getStudentVo"/>
    </resultMap>
    <select id="getTeacherAndStudent" resultMap="studentMap">
        SELECT
            t1.id teacherId,
            t1.teacherName
        FROM
            `a_teacher` t1
        where t1.id=#{teacherId}
    </select>
    <select id="getStudentVo" resultType="com.sz.entity.vo.TeacherVo$Student">
        SELECT
            studentName,
            id
        FROM
            `a_student`
        where t_id=#{teacherId}
    </select>

三、使用association

使用关联查询,利用resultMap中的<association>标签实现对字段的映射

TeacherVo teacherAndStudent = modelSuperviseRulesService.getTeacherAndStudent(1);
    <resultMap id="studentMap" type="com.sz.entity.vo.TeacherVo">
        <result column="id" property="teacherId" />
        <result column="teacherName" property="teacherName" />
        <association property="students" resultMap="KeyStudentsMap" />
    </resultMap>
    <resultMap id="KeyStudentsMap" type="com.sz.entity.vo.TeacherVo$Student">
        <result column="studentName" property="studentName" />
    </resultMap>

    <select id="getTeacherAndStudent" resultMap="studentMap">
        SELECT
            t1.id teacherId,
            t1.teacherName ,
            t2.studentName studentName
        FROM
            `a_teacher` t1
                left join a_student  t2 on t1.id=t2.t_id
        where t1.id=#{teacherId}
    </select>


三种方法的结果均为:

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: MyBatisCollection和Association是两种不同的关联映射方式Collection表示一对多的关系,例如一个订单对应多个订单项,可以使用Collection来映射。 Association表示一对一的关系,例如一个订单项对应一个商品,可以使用Association来映射。 在MyBatisCollection和Association都可以使用嵌套查询或者嵌套结果映射来实现。嵌套查询是指在查询主对象时,同时查询关联对象;嵌套结果映射是指将查询结果映射到主对象的属性,从而实现关联映射。 ### 回答2: MyBatiscollection association是一种用于处理一对多关系的技术。在MyBatis,可以使用collection标签来实现一对多关系的映射。 使用collection标签,可以将一个集合类型的属性关联到另一个实体类上。例如,假设有两个实体类`Author`和`Book`,一个作者可以拥有多本书,我们可以使用collection标签将作者的书籍集合关联到作者实体类上。 在mapper XML文件,可以使用collection标签来定义集合类型属性的映射关系。例如,可以使用collection标签将作者的书籍集合关联到作者实体类的books属性上: ```xml <resultMap id="authorMap" type="Author"> <id property="id" column="id" /> <result property="name" column="name" /> <collection property="books" ofType="Book"> <id property="id" column="book_id" /> <result property="title" column="book_title" /> </collection> </resultMap> ``` 通过使用collection标签,我们定义了作者实体类的books属性关联到了Book实体类,并定义了子标签的属性与数据库列的映射关系。 在使用这个映射关系时,可以在查询作者信息时将书籍集合一起查询出来,通过在查询语句加上关联的书籍信息。 因此,MyBatis的collection association提供了一种便捷的方式来处理一对多关系,可以灵活地处理集合类型属性的映射关系,方便地查询和使用多个相关联实体的数据。 ### 回答3: MyBatis是一种用于Java语言的持久层框架,它提供了一个简单而强大的方式来将数据库操作与Java对象之间进行映射。MyBatiscollection association是一种用于描述实体类之间的关联关系的机制。 在MyBatiscollection association可以用来表示实体类之间的一对多或多对多关系。它允许将一个对象的集合属性与另一个实体类进行关联,在数据库以外键关联的方式进行存储和查询。 一个常见的例子是,在一个订单对象,有一个用于表示订单项的集合属性。这个集合属性可以使用collection association来与订单项对象进行关联。这样,当查询一个订单对象时,可以通过一次查询获取该订单的所有订单项,而不需要额外的查询。 使用MyBatis的collection association,可以通过在XML映射文件配置相关的关联关系,实现一对多或多对多的查询,提高了数据库操作的性能和效率。 在配置collection association时,需要指定关联关系的字段映射规则、关联表的名称和关联查询的SQL语句。通过MyBatis提供的标签和属性,可以灵活地配置关联关系,以满足不同的业务需求。 总而言之,MyBatis的collection association是一种实现对象之间一对多或多对多关系的机制,它可以简化数据库操作,提高查询效率。通过合理配置和使用,可以使开发者更加便捷地进行数据操作和关联查询。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值