Mybatis学习笔记:ResultMap作用(结果映射,一对多,多对多等)
1.两大作用(配置结果类型):
解决数据表列名和javabean属性不一致的问题
提供一对一、一对多、多对多等高级映射
2.当实体类对象与数据库字段不匹配时:
方案1:使用sql语句as 起别名的方式修改查询结果的名称
方案2:使用resultMap,完成数据库字段与实体类属性的映射。(可被多个sql语句共用) select id,name ,age,sex,height,s_address from student_tb where id = #{id}
3.一对一:
使用一对一查询时,在一个实体类中添加另一实体类属性。用resultMap实现映射关系时,使用association连接,javaType为封装的类型。
如下:在Score中添加Student属性,以及getter和setter方法
映射关系 SELECT a.*,b.* FROM score_tb a LEFT JOIN student_tb b ON a.studentid = b.id;
3.一对多
一对多是在一个类中包含另一个类list的集合,在映射时,使用Collection,ofType为封装类型。注意封装类型与一对一不同
如下:在学生实体中。添加score集合
映射关系: SELECT * FROM student_tb a LEFT JOIN score_tb b ON a.id = b.studentid
4.多对多
表之间的多对多关系稍微复杂,需要一个中间表来表示
中间表有三个字段,其中两个字段分别作为外键指向各自一方的主键,由此通过中间表来表示多对多关系,通过一个表联合另一个中间表可以表示为一对多关系。
多对多,其实可以从一方到另一方表示为一对多关系,反之亦然
student_role_tb : id,studentid, roieid
如:查找职位,并包含对应的学生信息,一个职位可能有很多学生,如组长,一对多关系
第一步: 在role实体中添加student属性,
第二步:书写映射关系,按一对多即可 select r.*,sr.studentid, s.* from role_tb r LEFT JOIN student_role_tb sr on r.roleid=sr.roleid LEFT JOIN student_tb s on s.id = sr.studentid
反之亦然,如:查找学生并包含职位信息,也是一对多关系
第一步: 在student实体中添加role属性,
第二步:书写映射关系,按一对多即可 select s.*,sr.studentid, r.* from student_tb s LEFT JOIN student_role_tb sr on s.id = sr.studentid LEFT JOIN role_tb r on r.roleid = sr.roleid;
1.两大作用(配置结果类型):
解决数据表列名和javabean属性不一致的问题
提供一对一、一对多、多对多等高级映射
2.当实体类对象与数据库字段不匹配时:
方案1:使用sql语句as 起别名的方式修改查询结果的名称
方案2:使用resultMap,完成数据库字段与实体类属性的映射。(可被多个sql语句共用) select id,name ,age,sex,height,s_address from student_tb where id = #{id}
3.一对一:
使用一对一查询时,在一个实体类中添加另一实体类属性。用resultMap实现映射关系时,使用association连接,javaType为封装的类型。
如下:在Score中添加Student属性,以及getter和setter方法
映射关系 SELECT a.*,b.* FROM score_tb a LEFT JOIN student_tb b ON a.studentid = b.id;
3.一对多
一对多是在一个类中包含另一个类list的集合,在映射时,使用Collection,ofType为封装类型。注意封装类型与一对一不同
如下:在学生实体中。添加score集合
映射关系: SELECT * FROM student_tb a LEFT JOIN score_tb b ON a.id = b.studentid
4.多对多
表之间的多对多关系稍微复杂,需要一个中间表来表示
中间表有三个字段,其中两个字段分别作为外键指向各自一方的主键,由此通过中间表来表示多对多关系,通过一个表联合另一个中间表可以表示为一对多关系。
多对多,其实可以从一方到另一方表示为一对多关系,反之亦然
student_role_tb : id,studentid, roieid
如:查找职位,并包含对应的学生信息,一个职位可能有很多学生,如组长,一对多关系
第一步: 在role实体中添加student属性,
第二步:书写映射关系,按一对多即可 select r.*,sr.studentid, s.* from role_tb r LEFT JOIN student_role_tb sr on r.roleid=sr.roleid LEFT JOIN student_tb s on s.id = sr.studentid
反之亦然,如:查找学生并包含职位信息,也是一对多关系
第一步: 在student实体中添加role属性,
第二步:书写映射关系,按一对多即可 select s.*,sr.studentid, r.* from student_tb s LEFT JOIN student_role_tb sr on s.id = sr.studentid LEFT JOIN role_tb r on r.roleid = sr.roleid;