首先先谈谈resultType和resultMap,其中resultType是一种返回类型,绝⼤数查询场景可以使⽤ resultType 进行返回,它的优点是使用方便,直接定义到某个实体类,如下代码所示:
而resultMap是返回字典映射,它的使用场景是:数据库中的字段名称和程序中的属性名不相同的情况,在多表查询中的一对一和一对多关系可以使用resultMap映射并查询数据。
在多表查询时,如果使⽤ resultType 标签,在⼀个类中包含了另⼀个对象是查询不出来被包含的对象的,⽐如以下实体类:
一对一映射
⼀对⼀映射要使⽤ <association> 标签,具体实现如下(⼀篇⽂章只对应⼀个作者):
使⽤ <association>标签,表示⼀对⼀的结果映射:
property 属性:指定 Article 中对应的属性,即⽤户。
resultMap 属性:指定关联的结果集映射,将基于该映射配置来组织⽤户数据。
注意:columnPrefix 属性不能省略,如果省略,当两表中如果有相同的字段,那么就会导致查询出错。⽐如两篇⽂章都是⼀个⼈写的,如果没有 columnPrefix 就会导致查询的⽤户 id被⽂章表 id 覆盖,查询出错。使用columnPrefix可以解决多表中相同字段数据覆盖的问题。
一对多映射
⼀对多需要使⽤ <collection> 标签,⽤法和 <association> 相同,如下所示(一个作者对应多篇文章):