0


MyBatis如何实现多表查询

MyBatis如何实现多表查询

先说结论,在MyBatis中我们有两种方式来实现多表查询

一、使用sqlmapper配置文件

二、使用注解

直入主题首先我们来看如何使用配置文件的方式来实现一对一,和一对多查询

首先我们有教师表和课程表,这里我们假定:一个课程可以有多个老师(一对多),一个老师只教一门课程(一对一)

课程表
在这里插入图片描述
教师表
在这里插入图片描述

先来看一对一怎么写

在实体类中我们需要创建一个 课程类型的外部属性

publicclassTeacher{privateint tid;privateString tname;privateString tsex;privateDate tbirthday;privateString taddress;privateString temail;privateString tmoney;privateint cid;//外部属性privateCourse course;}

TeacherMapper.xml

这里在ResultMap标签中使用

association

标签来建立一对一的映射关系

<mappernamespace="com.day4.mapper.TeacherMapper"><!-- 类路径 --><resultMapid="Teahcer_Scoure_Map"type="Teacher"><resultproperty="tid"column="tid"/><resultproperty="tname"column="tname"/><resultproperty="tbirthday"column="tbirthday"/><resultproperty="tsex"column="tsex"/><resultproperty="taddress"column="taddress"/><resultproperty="temail"column="temail"/><resultproperty="tmoney"column="tmoney"/><resultproperty="cid"column="cid"/><associationproperty="course"><resultcolumn="cid"property="cid"/><resultcolumn="cname"property="cname"/></association></resultMap><selectid="FindAllTeacherbysqlmapper"resultMap="Teahcer_Scoure_Map">
        select * from course inner join teacher
        on teacher.cid = course.cid

    </select></mapper>

结果:
在这里插入图片描述

一对多

我们需要在课程的实体类中创建一个老师类型的集合

publicclassCourse{privateint cid;privateString cname;//外部属性privateList<Teacher> tlsit;}

CourseMapper.xml

这里在ResultMap标签中使用

collection

标签来建立一对多的映射关系

<mappernamespace="com.day4.mapper.CourseMapper"><!-- 类路径 --><resultMapid="Teahcer_Scoure_Map"type="course"><resultcolumn="cid"property="cid"/><resultcolumn="cname"property="cname"/><collectionproperty="tlsit"ofType="Teacher"><resultproperty="tid"column="tid"/><resultproperty="tname"column="tname"/><resultproperty="tbirthday"column="tbirthday"/><resultproperty="tsex"column="tsex"/><resultproperty="taddress"column="taddress"/><resultproperty="temail"column="temail"/><resultproperty="tmoney"column="tmoney"/></collection></resultMap><selectid="FindAllCoursebysqlmapper"resultMap="Teahcer_Scoure_Map">
        select * from teacher inner join course
        on teacher.cid = course.cid
    </select></mapper>

结果:
在这里插入图片描述

使用注解的方式

同样我们需要在Teacher实体类中创建一个课程类型的外部属性

Teacher.java

publicclassTeacher{privateint tid;privateString tname;privateString tsex;privateDate tbirthday;privateString taddress;privateString temail;privateString tmoney;privateint cid;//外部属性privateCourse course;}

TeacherMapper接口
使用@Results完成数据库字段和JavaBean属性的映射@Results中可以包含多个@Result

@Results({@Result(column="cid",property="cid"),@Result( column="cid",property="course",<!--@One 实现一对一-->
         one=@One(select ="com.day4.mapper.CourseMapper.FindAllCoursebyid"))})@Select("select * from teacher")publicList<Teacher>FindAllTeacher();

CourseMapper接口

@Select("select * from course where cid = #{v}")publicCourseFindAllCoursebyid(int v);

结果:
在这里插入图片描述

一对多

Course.java实体类

publicclassCourse{privateint cid;privateString cname;privateint tid;privateList<Teacher> tlsit;}

TeacherMapper.java实体类

@Select("select * from teacher where cid = #{v}")publicTeacherFindAllTeacherbyid(int cid);

CourseMapper接口

@Results({@Result(column="cid",property="cid"),@Result( column="cid",property="tlsit",<!--@Many 实现一对多-->
              many=@Many(select ="com.day4.mapper.TeacherMapper.FindAllTeacherbyid"))})@Select("select * from course")publicList<Course>FindAllCourser();

结果:
在这里插入图片描述

标签: mybatis java mysql

本文转载自: https://blog.csdn.net/weixin_42588032/article/details/125473362
版权归原作者 Hypnos924 所有, 如有侵权,请联系我们删除。

“MyBatis如何实现多表查询”的评论:

还没有评论