Mybatis——Mapper.xml中查询相关配置的归纳

再次阅读了Mybatis官方文档,感觉在自己上手实际项目的情况下能更加容易地理解这份文档,也许是翻译质量不太高的原因,我个人认为这份文档是极不适合初学者将其作为入门资料学习的,这文档其实就是一篇夹杂详细说明的API,我想应该没人通过读API来入门吧。

回归正题,今天我在按教程写练手项目时又遇见了开始接触Mybatis时未曾解决的问题——为何要用实体对象的包装类,这个问题比较大,当时只是照葫芦画瓢,草草按教程的写法写完了事,现在从此问题又引发了一些其他基础问题——配置文件中有关包装类的resultMap标签及其associate、collection子标签的作用是什么,下面一个个归纳。

一、为何要用实体对象的包装类
现在我还无法解决该问题,网上千篇一律地说是根据业务需要,这么些有更好的拓展性,但我目前遇到的业务场景较为简单,用与不用没有差别,用了反而在Mapper.xml中需要额外配置,并令文件内容变得复杂,今后遇到了更复杂的业务需求再来更新这部分内容。

二、resultMap标签

这个配置若不手动显性写出Mybatis也是隐形配置有的,其作用就是把数据库查询结果映射到实体类上(高端的说法:领域模型),
显性写出的resultMap

若不写出,Mybatis会自动查找与数据库列名对应的实体类属性名并以上图方式实现映射(Mybatis默认的命名法:数据库列名为以“-”分隔的单词,实体类属性名为以驼峰命名法创造的单词),若无法找到对应的列名则映射的实体相关属性值为null。当属性名和列名不对应,可手动写出,除了这个用法,它还可以根据业务映射未与数据库表对应的实体类,如数据库表记用id关联其他表记录,但是实体类的属性为其他类或一个集合(传说中的一对一,一对多),需要用到associate和collection标签。

三、associate标签(关联)

映射一个以另一个实体类作为属性的实体类,需要查询出作为属性的实体类的自身相关信息,当配置其他属性后,可实现相当强大的映射功能
关联的查询嵌套,对于涉及大量数据的查询操作性能较差

关联的结果嵌套,可以实现重用部分resultMap的效果

但是当仅仅需要映射一个以另一个实体类作为属性的实体类时无须使用该标签,只要在实体类中配置相关属性,并写上get方法,在Mapper.xml中查询出相关实体类的对应列的值即可完成自动映射。
四、collection标签(集合)

用于映射具有一对多关系的实体类(该类为“一”,其集合属性为“多”)
集合的嵌套查询,与关联相似,其中的javaType可省略

集合的嵌套结果
有重用效果的集合嵌套结果

你可能感兴趣的:(Mybatis——Mapper.xml中查询相关配置的归纳)