Mybatis 一对一,一对多,多对多查询

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Stephen_mu/article/details/88543765

一对一查询:

可以使用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属性使用,可以查询结果映射的继承       
             

 

猜你喜欢

转载自blog.csdn.net/Stephen_mu/article/details/88543765