zoukankan      html  css  js  c++  java
  • mybatis的嵌套查询与嵌套结果查询的不同

    原文: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;

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

  • 相关阅读:
    es6 语法 (数值扩展)
    手机日期插件 (转加上自己喜欢的)
    仿微信抢红包(js 转)
    默认时间为今天
    es6 语法 (解构赋值)
    es6 语法 (let 和const)
    es6环境搭建
    express 安装和运行
    git 常用操作,下拉,提交,更新,还原
    排序。
  • 原文地址:https://www.cnblogs.com/lvchengda/p/12597201.html
Copyright © 2011-2022 走看看