码迷,mamicode.com
首页 > 其他好文 > 详细

mybatis的嵌套查询与嵌套结果查询的不同

时间:2020-03-30 11:18:18      阅读:271      评论:0      收藏:0      [点我收藏+]

标签:oss   nim   sso   标签   支持   封装   它的   使用   size   

原文:https://blog.csdn.net/qq_39706071/article/details/85156840

实体类:技术图片

嵌套查询mapper方法:技术图片
嵌套查询的弊端:即嵌套查询的N+1问题
尽管嵌套查询大量的简化了存在关联关系的查询,但它的弊端也比较明显:即所谓的N+1问题。关联的嵌套查询显示得到一个结果集,然后根据这个结果集的每一条记录进行关联查询。
现在假设嵌套查询就一个(即resultMap 内部就一个association标签),现查询的结果集返回条数为N,那么关联查询语句将会被执行N次,加上自身返回结果集查询1次,共需要访问数据库N+1次。如果N比较大的话,这样的数据库访问消耗是非常大的!所以使用这种嵌套语句查询的使用者一定要考虑慎重考虑,确保N值不会很大。

嵌套结果查询:
嵌套语句的查询会导致数据库访问次数不定,进而有可能影响到性能。Mybatis还支持一种嵌套结果的查询:即对于一对多,多对多,多对一的情况的查询,Mybatis通过联合查询,将结果从数据库内一次性查出来,然后根据其一对多,多对一,多对多的关系和ResultMap中的配置,进行结果的转换,构建需要的对象。

比如:此就是嵌套结果查询
技术图片
技术图片
对于关联的结果查询,如果是多对一的关系,则通过形如 进行配置,Mybatis会通过column属性对应的user_id 值去从内存中取数据,并且封装成User_order对象;

如果是一对多的关系,就如User和User_order之间的关系,通过形如 进行配置,MyBatis通过 id去内存中取User_orders对象,封装成List;

对于关联结果的查询,只需要查询数据库一次,然后对结果的整合和组装全部放在了内存中。

mybatis的嵌套查询与嵌套结果查询的不同

标签:oss   nim   sso   标签   支持   封装   它的   使用   size   

原文地址:https://www.cnblogs.com/lvchengda/p/12597201.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!