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;

(0)

相关推荐