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();
结果:
版权归原作者 Hypnos924 所有, 如有侵权,请联系我们删除。