resultMap 元素是 MyBatis 中最重要最强大的元素。它可以让你从 90% 的 JDBC ResultSets 数据提取代码中解放出来,在对复杂语句进行联合映射的时候,它很可能可以代替数千行的同等功能的代码。 ResultMap 的设计思想是,简单的语句不需要明确的结果映射,而复杂一点的语句只需要描述它们的关系就行了。

    开发规范强制使用resultMap的,即使Pojo和数据库字段是一样的,也要使用resultMap,为什么这样做呢?其实是为了解耦合,因为pojo和数据库的字段如果是一样的,用了resultType的话,这样就耦合在一起了,如果数据库的字段一修改了,pojo的属性没有修改,那么就对应不上了,结果可能就是程序会发生异常了.
    为了解除耦合,就用resultMap,只要维护result标签的column属性和property属性就行了.即使数据库修改了字段,你只要在对应的Mapper.xml修改resultMap就可以了,这样就不需要动pojo了.然后就可以直接部署到生产环境了.

    如果是按照resultType就麻烦了,如果数据库字段修改了,pojo的代码也需要修改,代码还得重新编译,编译完了还得测试,测试完了没有问题了,才能放到生产环境上使用.



    开发小技巧:
    1. resultMap可以通过使用extends实现继承关系,简化很多配置工作量;
    2. 关联的表查询的类添加前缀是编程的好习惯;
    3. 通过添加完整的命名空间,可以引用其他xml文件的resultMap;



    ResultSet是JDBC的 表示数据库结果集的东西,用来存放从数据查询出来的结果.

    属性 描述
    id 当前命名空间中的一个唯一标识,用于标识一个result map.
    type 类的完全限定名, 或者一个类型别名.就是我要将结果转换成拿个POJO
    autoMapping 如果设置这个属性,MyBatis将会为这个ResultMap开启或者关闭自动映射。这个属性会覆盖全局的属性 autoMappingBehavior。默认值为:unset。



    使用场景总结:1. 字段有自定义的转化规则;2. 复杂的多表查询

    resultMap元素的子元素

    1.id –一个 ID 结果;标记出作为 ID 的结果可以帮助提高整体性能,一对多的查询中用于结果集合并;

    2.result – 注入到字段或 JavaBean 属性的普通结果

    3.association – association映射的是一个JavaBean类,它仅处理一对一的关联关系。
    嵌套结果映射 – 关联可以指定为一个 resultMap 元素,或者引用一个

    4.collection –collection则是映射的一个集合列表,它处理的是一对多的关联关系。
    嵌套结果映射 – 集合可以指定为一个 resultMap 元素,或者引用一个

    参考:
    https://blog.csdn.net/qq_41382912/article/details/81366485


    resultMap - 图1
    resultMap - 图2