一对一查询:
可以使用resultType,针对的是简单查询,不需要关联查询另一方。
可以使用resultMap,涉及到关联查询就使用ResultMap,涉及到关联查询使用<assciation>标签
一对多查询:
例子:https://blog.csdn.net/qq_33561055/article/details/78861131
使用<collection>标签
多对多查询:
例子:https://blog.csdn.net/liu_yanzhao/article/details/78573023
提示:嵌套查询 <collection>标签里面再嵌套<collection>
注意:多层嵌套可能造成资源浪费,我们可以使用延迟加载,让资源在使用时才去加载,这样可以提高数据库的性能。
注意mybatis默认没有开启延迟加载,需要我们在配置文件中,手动配置开启延迟加载
<settings>
<!--延迟加载的全局开关 -->
<setting name="lazyLoadingEnabled" value="true" />
<!--积极加载的全局开关 -->
<setting name="aggressiveLazyLoading" value="false" />
</settings>
1.延迟加载定义:
关联查询时,遇到暂时不需要的关联查询结果,选择先不去加载(延迟加载),待到需要使用时才去加载,这样可以大大提高数据库的性能。
2.以下涉及关联查询的配置均可实现延迟加载,且都来自resultMap(resultMap才具备延迟加载的功能)
association:将关联的查询对象映射到单个的pojo中
select: 子关联查询的Statement(sql)ID,如果statement不在当前mapper文件中配置,则需要加载其他mapper文件的namespace来指明引用来源
column: 关联查询过程中的外键列名
collection: 将关联的查询对象映射到多个的pojo中(集合)
3.离开mybatis框架如何实现延迟加载
1.其实很简单,我们只需要将关联查询拆分成两个简单查询,然后在service层内,按需设置调用即可。
补充:
association: 将关联的查询对象映射到单个的pojo中
collection: 将关联的查询对象映射到多个的pojo中(集合)
ofType:指定映射的集合属性中pojo的类型
resultMap标签中extends属性使用,可以查询结果映射的继承